Skip to content

Commit

Permalink
fanotify22: Make tests not depend on behavior of shutdown filesystem
Browse files Browse the repository at this point in the history
The tests in fanotify22 implicitely depended on the fact that filesystem
shutdown with 'abort' mount option keeps reporting further errors and
further mounts with 'abort' option. This is however too strict (mostly a
bug in ext4 implementation) and in principle reporting errors after the
filesystem is shutdown is just a pointless noise. Ext4 recently modified
the behavior of 'abort' mount option to behave the same as filesystem
shutdown and thus also stop reporting further filesystem errors. Modify
the tests to unmount and mount the filesystem after each test to get it
out of the shutdown state for the following tests and also replace a
test testing behavior after mounting with 'abort' mount option with a
test testing two different filesystem corruption errors.

Reviewed-by: Amir Goldstein <[email protected]>
Reviewed-by: Cyril Hrubis <[email protected]>
Signed-off-by: Jan Kara <[email protected]>
  • Loading branch information
jankara authored and metan-ucw committed Aug 28, 2023
1 parent 4321508 commit 020f398
Showing 1 changed file with 26 additions and 7 deletions.
33 changes: 26 additions & 7 deletions testcases/kernel/syscalls/fanotify/fanotify22.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
#define MOUNT_PATH "test_mnt"
#define BASE_DIR "internal_dir"
#define BAD_DIR BASE_DIR"/bad_dir"
#define BAD_LINK BASE_DIR"/bad_link"

#ifdef HAVE_NAME_TO_HANDLE_AT

Expand All @@ -51,6 +52,7 @@ static int fd_notify;
/* These expected FIDs are common to multiple tests */
static struct fanotify_fid_t null_fid;
static struct fanotify_fid_t bad_file_fid;
static struct fanotify_fid_t bad_link_fid;

static void trigger_fs_abort(void)
{
Expand All @@ -65,7 +67,7 @@ static void do_debugfs_request(const char *dev, char *request)
SAFE_CMD(cmd, NULL, NULL);
}

static void tcase2_trigger_lookup(void)
static void trigger_bad_file_lookup(void)
{
int ret;

Expand All @@ -76,15 +78,27 @@ static void tcase2_trigger_lookup(void)
ret, BAD_DIR, errno, EUCLEAN);
}

static void trigger_bad_link_lookup(void)
{
int ret;

/* SAFE_OPEN cannot be used here because we expect it to fail. */
ret = open(MOUNT_PATH"/"BAD_LINK, O_RDONLY, 0);
if (ret != -1 && errno != EUCLEAN)
tst_res(TFAIL, "Unexpected open result(%d) of %s (%d!=%d)",
ret, BAD_LINK, errno, EUCLEAN);
}


static void tcase3_trigger(void)
{
trigger_fs_abort();
tcase2_trigger_lookup();
trigger_bad_link_lookup();
trigger_bad_file_lookup();
}

static void tcase4_trigger(void)
{
tcase2_trigger_lookup();
trigger_bad_file_lookup();
trigger_fs_abort();
}

Expand All @@ -104,7 +118,7 @@ static struct test_case {
},
{
.name = "Lookup of inode with invalid mode",
.trigger_error = &tcase2_trigger_lookup,
.trigger_error = &trigger_bad_file_lookup,
.error_count = 1,
.error = EFSCORRUPTED,
.fid = &bad_file_fid,
Expand All @@ -113,8 +127,8 @@ static struct test_case {
.name = "Multiple error submission",
.trigger_error = &tcase3_trigger,
.error_count = 2,
.error = ESHUTDOWN,
.fid = &null_fid,
.error = EFSCORRUPTED,
.fid = &bad_link_fid,
},
{
.name = "Multiple error submission 2",
Expand Down Expand Up @@ -248,6 +262,9 @@ static void do_test(unsigned int i)
FAN_FS_ERROR, AT_FDCWD, MOUNT_PATH);

check_event(event_buf, read_len, tcase);
/* Unmount and mount the filesystem to get it out of the error state */
SAFE_UMOUNT(MOUNT_PATH);
SAFE_MOUNT(tst_device->dev, MOUNT_PATH, tst_device->fs_type, 0, NULL);
}

static void pre_corrupt_fs(void)
Expand All @@ -256,9 +273,11 @@ static void pre_corrupt_fs(void)
SAFE_MKDIR(MOUNT_PATH"/"BAD_DIR, 0777);

fanotify_save_fid(MOUNT_PATH"/"BAD_DIR, &bad_file_fid);
fanotify_save_fid(MOUNT_PATH"/"BASE_DIR, &bad_link_fid);

SAFE_UMOUNT(MOUNT_PATH);
do_debugfs_request(tst_device->dev, "sif " BAD_DIR " mode 0xff");
do_debugfs_request(tst_device->dev, "ln <1> " BAD_LINK);
SAFE_MOUNT(tst_device->dev, MOUNT_PATH, tst_device->fs_type, 0, NULL);
}

Expand Down

0 comments on commit 020f398

Please sign in to comment.