[LTP] LTP/fanotify01 corner case

Amir Goldstein amir73il@gmail.com
Thu Feb 13 16:10:51 CET 2025


On Tue, May 21, 2024 at 3:02 AM Murphy Zhou <jencce.kernel@gmail.com> wrote:
>
>
>
> On Wed, May 15, 2024 at 2:37 AM Amir Goldstein <amir73il@gmail.com> wrote:
>>
>> On Tue, May 14, 2024 at 1:21 AM Murphy Zhou <jencce.kernel@gmail.com> wrote:
>> >
>> > Hi Amir,
>> >
>> > When TMPDIR is on NFS, fanotify01 get ENODEV when testing if it supports reporting events with fid from multi fs in setup():
>> >
>> >>         if (fanotify_flags_supported_on_fs(FAN_REPORT_FID, FAN_MARK_MOUNT, FAN_OPEN, ".")) {
>> >>                 inode_mark_fid_xdev = errno;
>> >>                 tst_res(TINFO, "TMPDIR does not support reporting events with fid from multi fs");
>> >>         }
>> >
>> >
>> > later in test_fanotify(), fd_notify firstly gets added a mark for the fs mounted within the NFS TMPDIR,
>> >
>> > and then at the end of test_fanotify(), added another mark for the TMPDIR which is NFS in this case, and check on the errno:
>> >
>> >>         ret = report_fid ? inode_mark_fid_xdev : 0;
>> >>         TST_EXP_FD_OR_FAIL(fanotify_mark(fd_notify, FAN_MARK_ADD, FAN_CLOSE_WRITE,
>> >>                                          AT_FDCWD, "."), ret);
>> >
>> >
>> >
>> > It worked fine till
>> >
>> >> commit 30ad1938326bf9303ca38090339d948975a626f5
>> >> Author: Amir Goldstein <amir73il@gmail.com>
>> >> Date:   Thu Nov 30 18:56:19 2023 +0200
>> >>
>> >>     fanotify: allow "weak" fsid when watching a single filesystem
>> >
>> >
>> > After this commit was merged, the first check got ENODEV and the second check got EXDEV.
>> >
>> > The both values make sense in their situation, but it seems like using one value as expected value for another seems not accurate here for me. I don't know much here, your help is much appreciated.
>>
>> Your analysis is exact and correct.
>>
>> The commit above caused a behavior change in that case moving from one
>> error that makes sense to another error that makes sense and the test
>> should cope with that.
>>
>> The easiest would be to open code TST_EXP_FD_OR_FAIL()
>> helper and check for either
>> errno == inode_mark_fid_xdev || errno == EXDEV.
>> not sure if there is an LTP helper for this pattern.
>
>

This issue came up again.
Please see another proposed solution:

https://lore.kernel.org/ltp/CAOQ4uxg3wAr7Brse9xORsPp0XqCKTxMmnc_DRWuQ2bVZUSZRpQ@mail.gmail.com/

Thanks,
Amir.


More information about the ltp mailing list