[LTP] [PATCH] fanotify10: Calling drop_cache twice to ensure the inode is evicted
Zizhi Wo
wozizhi@huawei.com
Wed Sep 4 09:34:15 CEST 2024
在 2024/9/3 22:08, Petr Vorel 写道:
> Hi all,
>
>> In this test case, some scenarios are designed to verify whether the
>> FANOTIFY_EVICTABLE flag takes effect: by verifying that information cannot
>> be obtained from the corresponding inode after drop_cache, as this flag
>> does not ping the inode.
>
>> However, drop_cache is only performed once here, which may result in the
>> inode not being released in NUMA scenarios. Suppose the inode is located
>> on NUMA0 and the dentry is located on NUMA1; the first drop_cache can only
>> ensure that the inode is added to the LRU list, but does not guarantee that
>> evict() can been called because dispose_list does not yet include this
>> inode when traversing NUMA0, which causes the testcase execution fail.
>
> I wonder if there can be some detection that inode is evicted.
> Or, can it happen that even 2x drop is not enough?
In this testcase scenario, there is only a single layer of dentry, and
there are no interdependencies between the dentries. Therefore, the
dependency chain only consists of dentry->inode. So in my opinion,
performing drop_cache twice ensures that the inode is evicted?
I haven't been able to come up with a good solution for detecting
whether an inode has been evicted. I would appreciate hearing everyone's
thoughts and suggestions on this matter. Thank you for your response.
Thanks,
Zizhi Wo
>
>> For the single-file scenario in this testcase, executing drop_cache twice
>> is necessary to ensure the inode is evicted, thus allowing the testcase to
>> pass.
>
> Acked-by: Petr Vorel <pvorel@suse.cz>
>
> @Amir, Jan, could you please have a look?
>
> Kind regards,
> Petr
>
>> Signed-off-by: Zizhi Wo <wozizhi@huawei.com>
>> ---
>> testcases/kernel/syscalls/fanotify/fanotify10.c | 2 ++
>> 1 file changed, 2 insertions(+)
>
>> diff --git a/testcases/kernel/syscalls/fanotify/fanotify10.c b/testcases/kernel/syscalls/fanotify/fanotify10.c
>> index c6d8ec922..42018de0d 100644
>> --- a/testcases/kernel/syscalls/fanotify/fanotify10.c
>> +++ b/testcases/kernel/syscalls/fanotify/fanotify10.c
>> @@ -515,6 +515,8 @@ static void drop_caches(void)
>> if (syncfs(fd_syncfs) < 0)
>> tst_brk(TBROK | TERRNO, "Unexpected error when syncing filesystem");
>
>> + /* Need to drop twice to ensure the inode is evicted. */
>> + SAFE_FILE_PRINTF(DROP_CACHES_FILE, "3");
>> SAFE_FILE_PRINTF(DROP_CACHES_FILE, "3");
>> }
More information about the ltp
mailing list