[LTP] [PATCH v2] fanotify23: Make evictable marks tests more reliable
Amir Goldstein
amir73il@gmail.com
Fri Aug 11 14:01:57 CEST 2023
On Thu, Aug 10, 2023 at 8:59 PM Jan Kara <jack@suse.cz> wrote:
>
> It has been observed that when fanotify23 test is run in a loop, it
> eventually fails as:
>
> fanotify23.c:112: TPASS: FAN_MARK_ADD failed with EEXIST as expected when trying to downgrade to evictable mark
> fanotify23.c:75: TPASS: FAN_MARK_REMOVE failed with ENOENT as expected after empty mask
> fanotify23.c:156: TPASS: Got no events as expected
> fanotify23.c:81: TFAIL: FAN_MARK_REMOVE did not fail with ENOENT as expected after drop_caches: SUCCESS (0)
>
> This is because repeated evictions of caches done by the test reclaim
> all freeable slab objects in the system. So when the test calls drop
> caches, only the dentry and inode of the test file are there to reclaim.
> But for inode to be reclaimed, dentry (which holds inode reference) has
> to be freed first and for dentry to be freed it has to first cycle
> through the LRU which takes two slab reclaim calls.
>
> Call drop caches twice to make sure dentry has chance to pass through
> the LRU and be reclaimed.
>
> Signed-off-by: Jan Kara <jack@suse.cz>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
> ---
> testcases/kernel/syscalls/fanotify/fanotify23.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/testcases/kernel/syscalls/fanotify/fanotify23.c b/testcases/kernel/syscalls/fanotify/fanotify23.c
> index 89fd4f36a09b..fb812c51e34e 100644
> --- a/testcases/kernel/syscalls/fanotify/fanotify23.c
> +++ b/testcases/kernel/syscalls/fanotify/fanotify23.c
> @@ -160,10 +160,16 @@ static void test_fanotify(void)
> }
>
> /*
> - * drop_caches should evict inode from cache and remove evictable mark
> + * drop_caches should evict inode from cache and remove evictable mark.
> + * We call drop_caches twice as once the dentries will just cycle
> + * through the LRU without being reclaimed and if there are no other
> + * objects to reclaim, the slab reclaim will just stop instead of
> + * retrying. Note that this relies on how reclaim of fs objects work
> + * for the filesystem but this test is restricted to ext2...
> */
> fsync_file(TEST_FILE);
> SAFE_FILE_PRINTF(DROP_CACHES_FILE, "3");
> + SAFE_FILE_PRINTF(DROP_CACHES_FILE, "3");
>
> verify_mark_removed(TEST_FILE, "after drop_caches");
>
> --
> 2.35.3
>
More information about the ltp
mailing list