[LTP] [PATCH] fanotify22: Make tests not depend on behavior of shutdown filesystem
Amir Goldstein
amir73il@gmail.com
Fri Aug 25 16:12:17 CEST 2023
On Fri, Aug 25, 2023 at 3:28 PM Jan Kara <jack@suse.cz> wrote:
>
> 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.
>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
> .../kernel/syscalls/fanotify/fanotify22.c | 19 ++++++++++++++++---
> 1 file changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/fanotify/fanotify22.c b/testcases/kernel/syscalls/fanotify/fanotify22.c
> index 1105172bb269..475155b9f58a 100644
> --- a/testcases/kernel/syscalls/fanotify/fanotify22.c
> +++ b/testcases/kernel/syscalls/fanotify/fanotify22.c
> @@ -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
>
> @@ -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)
> {
> @@ -78,7 +80,13 @@ static void tcase2_trigger_lookup(void)
>
> static void tcase3_trigger(void)
> {
> - trigger_fs_abort();
> + 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);
> tcase2_trigger_lookup();
> }
To make it more clear that this is a multiple error trigger, I would consider
1. use helper trigger_bad_link_lookup()
2. s/tcase2_trigger_lookup/trigger_bad_file_lookup
AND
static void tcase3_trigger(void)
{
trigger_bad_link_lookup();
trigger_bad_file_lookup();
}
With that nit fix, you may add:
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
>
> @@ -113,8 +121,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",
> @@ -248,6 +256,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)
> @@ -256,9 +267,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);
> }
>
> --
> 2.35.3
>
More information about the ltp
mailing list