diff mbox series

[4/5] syscalls/fanotify10: Mount cycle between test cases

Message ID 20220613143826.1328830-5-amir73il@gmail.com
State Accepted
Headers show
Series Fanotify tests for FAN_MARK_EVICTABLE | expand

Commit Message

Amir Goldstein June 13, 2022, 2:38 p.m. UTC
Mount cycle detects inode refcount errors and waits for all marks
of test case to be destructed before continuing to next test case.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
 .../kernel/syscalls/fanotify/fanotify10.c     | 25 +++++++++++++------
 1 file changed, 18 insertions(+), 7 deletions(-)

Comments

Jan Kara June 14, 2022, 10:47 a.m. UTC | #1
On Mon 13-06-22 17:38:25, Amir Goldstein wrote:
> Mount cycle detects inode refcount errors and waits for all marks
> of test case to be destructed before continuing to next test case.
> 
> Signed-off-by: Amir Goldstein <amir73il@gmail.com>

Looks good to me. Feel free to add:

Reviewed-by: Jan Kara <jack@suse.cz>

								Honza

> ---
>  .../kernel/syscalls/fanotify/fanotify10.c     | 25 +++++++++++++------
>  1 file changed, 18 insertions(+), 7 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/fanotify/fanotify10.c b/testcases/kernel/syscalls/fanotify/fanotify10.c
> index efef25135..b9a50672d 100644
> --- a/testcases/kernel/syscalls/fanotify/fanotify10.c
> +++ b/testcases/kernel/syscalls/fanotify/fanotify10.c
> @@ -360,6 +360,17 @@ static void cleanup_fanotify_groups(void)
>  	}
>  }
>  
> +/* Flush out all pending dirty inodes and destructing marks */
> +static void mount_cycle(void)
> +{
> +	if (bind_mount_created)
> +		SAFE_UMOUNT(MNT2_PATH);
> +	SAFE_UMOUNT(MOUNT_PATH);
> +	SAFE_MOUNT(tst_device->dev, MOUNT_PATH, tst_device->fs_type, 0, NULL);
> +	SAFE_MOUNT(MOUNT_PATH, MNT2_PATH, "none", MS_BIND, NULL);
> +	bind_mount_created = 1;
> +}
> +
>  static void verify_event(int p, int group, struct fanotify_event_metadata *event,
>  			 unsigned long long expected_mask)
>  {
> @@ -508,6 +519,7 @@ static void test_fanotify(unsigned int n)
>  	}
>  cleanup:
>  	cleanup_fanotify_groups();
> +	mount_cycle();
>  }
>  
>  static void setup(void)
> @@ -523,25 +535,24 @@ static void setup(void)
>  		num_classes = NUM_PRIORITIES;
>  	}
>  
> -	/* Create another bind mount at another path for generating events */
> -	SAFE_MKDIR(MNT2_PATH, 0755);
> -	SAFE_MOUNT(MOUNT_PATH, MNT2_PATH, "none", MS_BIND, NULL);
> -	bind_mount_created = 1;
> -
>  	SAFE_MKDIR(DIR_PATH, 0755);
>  	SAFE_FILE_PRINTF(FILE_PATH, "1");
>  	SAFE_FILE_PRINTF(FILE2_PATH, "1");
>  
>  	SAFE_CP(TEST_APP, FILE_EXEC_PATH);
>  	SAFE_CP(TEST_APP, FILE2_EXEC_PATH);
> +
> +	/* Create another bind mount at another path for generating events */
> +	SAFE_MKDIR(MNT2_PATH, 0755);
> +	mount_cycle();
>  }
>  
>  static void cleanup(void)
>  {
>  	cleanup_fanotify_groups();
>  
> -	if (bind_mount_created && tst_umount(MNT2_PATH) < 0)
> -		tst_brk(TBROK | TERRNO, "bind umount failed");
> +	if (bind_mount_created)
> +		SAFE_UMOUNT(MNT2_PATH);
>  }
>  
>  static const char *const resource_files[] = {
> -- 
> 2.25.1
>
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/fanotify/fanotify10.c b/testcases/kernel/syscalls/fanotify/fanotify10.c
index efef25135..b9a50672d 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify10.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify10.c
@@ -360,6 +360,17 @@  static void cleanup_fanotify_groups(void)
 	}
 }
 
+/* Flush out all pending dirty inodes and destructing marks */
+static void mount_cycle(void)
+{
+	if (bind_mount_created)
+		SAFE_UMOUNT(MNT2_PATH);
+	SAFE_UMOUNT(MOUNT_PATH);
+	SAFE_MOUNT(tst_device->dev, MOUNT_PATH, tst_device->fs_type, 0, NULL);
+	SAFE_MOUNT(MOUNT_PATH, MNT2_PATH, "none", MS_BIND, NULL);
+	bind_mount_created = 1;
+}
+
 static void verify_event(int p, int group, struct fanotify_event_metadata *event,
 			 unsigned long long expected_mask)
 {
@@ -508,6 +519,7 @@  static void test_fanotify(unsigned int n)
 	}
 cleanup:
 	cleanup_fanotify_groups();
+	mount_cycle();
 }
 
 static void setup(void)
@@ -523,25 +535,24 @@  static void setup(void)
 		num_classes = NUM_PRIORITIES;
 	}
 
-	/* Create another bind mount at another path for generating events */
-	SAFE_MKDIR(MNT2_PATH, 0755);
-	SAFE_MOUNT(MOUNT_PATH, MNT2_PATH, "none", MS_BIND, NULL);
-	bind_mount_created = 1;
-
 	SAFE_MKDIR(DIR_PATH, 0755);
 	SAFE_FILE_PRINTF(FILE_PATH, "1");
 	SAFE_FILE_PRINTF(FILE2_PATH, "1");
 
 	SAFE_CP(TEST_APP, FILE_EXEC_PATH);
 	SAFE_CP(TEST_APP, FILE2_EXEC_PATH);
+
+	/* Create another bind mount at another path for generating events */
+	SAFE_MKDIR(MNT2_PATH, 0755);
+	mount_cycle();
 }
 
 static void cleanup(void)
 {
 	cleanup_fanotify_groups();
 
-	if (bind_mount_created && tst_umount(MNT2_PATH) < 0)
-		tst_brk(TBROK | TERRNO, "bind umount failed");
+	if (bind_mount_created)
+		SAFE_UMOUNT(MNT2_PATH);
 }
 
 static const char *const resource_files[] = {