diff mbox series

[1/1] fanotify: Handle EOPNOTSUPP as TCONF

Message ID 20240124122130.288374-1-pvorel@suse.cz
State Rejected
Headers show
Series [1/1] fanotify: Handle EOPNOTSUPP as TCONF | expand

Commit Message

Petr Vorel Jan. 24, 2024, 12:21 p.m. UTC
Found on kernel 6.7 (Tumbleweed) on exfat:

tst_test.c:1669: TINFO: === Testing on exfat ===
tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fanoL9KLE/mntpoint fstyp=exfat flags=0
fanotify14.c:246: TINFO: Test case 0: fanotify_init(FAN_CLASS_CONTENT | FAN_REPORT_FID, O_RDONLY)
fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
fanotify14.c:246: TINFO: Test case 1: fanotify_init(FAN_CLASS_PRE_CONTENT | FAN_REPORT_FID, O_RDONLY)
fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
fanotify14.c:246: TINFO: Test case 2: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with INODE_EVENTS
fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
fanotify14.c:246: TINFO: Test case 3: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY)
fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
fanotify14.c:283: TINFO: Testing FAN_MARK_MOUNT with INODE_EVENTS
fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
fanotify14.c:246: TINFO: Test case 4: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_NAME, O_RDONLY)
fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
fanotify14.c:246: TINFO: Test case 5: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID | FAN_REPORT_NAME, O_RDONLY)
fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
fanotify14.c:246: TINFO: Test case 6: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_NAME, O_RDONLY)
fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
fanotify14.c:246: TINFO: Test case 7: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_FID, O_RDONLY)
fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
fanotify14.c:246: TINFO: Test case 8: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_FID, O_RDONLY)
fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_RENAME
fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
fanotify14.c:246: TINFO: Test case 9: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
fanotify14.c:283: TINFO: Testing FAN_MARK_ONLYDIR with FAN_OPEN
fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
fanotify14.c:246: TINFO: Test case 10: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME_TARGET, O_RDONLY)
fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_DELETE
fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
fanotify14.c:303: TBROK: fanotify_mark(5, 0x101, 0x200, ..., mntpoint/file1) unsupported: EOPNOTSUPP (95)

Reported-by: Dominique Leuenberger <dleuenberger@suse.com>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
Hi,

I wonder, if this is a bug or not.

Kind regards,
Petr

 testcases/kernel/syscalls/fanotify/fanotify.h | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

Comments

Amir Goldstein Jan. 24, 2024, 2:45 p.m. UTC | #1
On Wed, Jan 24, 2024 at 2:21 PM Petr Vorel <pvorel@suse.cz> wrote:
>
> Found on kernel 6.7 (Tumbleweed) on exfat:
>
> tst_test.c:1669: TINFO: === Testing on exfat ===
> tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
> tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fanoL9KLE/mntpoint fstyp=exfat flags=0
> fanotify14.c:246: TINFO: Test case 0: fanotify_init(FAN_CLASS_CONTENT | FAN_REPORT_FID, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 1: fanotify_init(FAN_CLASS_PRE_CONTENT | FAN_REPORT_FID, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 2: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with INODE_EVENTS
> fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 3: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY)
> fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> fanotify14.c:283: TINFO: Testing FAN_MARK_MOUNT with INODE_EVENTS
> fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 4: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_NAME, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 5: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID | FAN_REPORT_NAME, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 6: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_NAME, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 7: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_FID, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 8: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_FID, O_RDONLY)
> fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_RENAME
> fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 9: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> fanotify14.c:283: TINFO: Testing FAN_MARK_ONLYDIR with FAN_OPEN
> fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> fanotify14.c:246: TINFO: Test case 10: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME_TARGET, O_RDONLY)
> fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_DELETE
> fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> fanotify14.c:303: TBROK: fanotify_mark(5, 0x101, 0x200, ..., mntpoint/file1) unsupported: EOPNOTSUPP (95)
>
> Reported-by: Dominique Leuenberger <dleuenberger@suse.com>
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
> Hi,
>
> I wonder, if this is a bug or not.
>
> Kind regards,
> Petr
>
>  testcases/kernel/syscalls/fanotify/fanotify.h | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
> index e0d178bcc..dd1f5c84c 100644
> --- a/testcases/kernel/syscalls/fanotify/fanotify.h
> +++ b/testcases/kernel/syscalls/fanotify/fanotify.h
> @@ -47,9 +47,15 @@ static inline int safe_fanotify_mark(const char *file, const int lineno,
>         rval = fanotify_mark(fd, flags, mask, dfd, pathname);
>
>         if (rval == -1) {
> -               tst_brk_(file, lineno, TBROK | TERRNO,
> -                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> -                        fd, flags, mask, pathname);
> +               if (errno == EOPNOTSUPP) {
> +                       tst_brk_(file, lineno, TCONF | TERRNO,
> +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) unsupported",
> +                                        fd, flags, mask, pathname);
> +               } else {
> +                       tst_brk_(file, lineno, TBROK | TERRNO,
> +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> +                                        fd, flags, mask, pathname);
> +               }
>         }
>
>         if (rval < -1) {
> --
> 2.43.0
>

Petr,

I don't think this is the right fix.

Am I correct to assume that exfat was skipped in this test prior
to v6.8-rc1?
30ad1938326b fanotify: allow "weak" fsid when watching a single filesystem

I have prepared a branch to test the v6.8-rc1 fanotify changes:

https://github.com/amir73il/ltp/commits/fanotify_fsid/

Normally, I post the tests much later in the a release cycle, but the changes
in v6.8-rc1 will cause several new filesystems (e.g. fuse-ntfs3) to start
running the fanotify tests, so we may need to merge some of those test
fixes sooner.

Can you please test if the changes in my branch fix this test failure.
Let me know if you need me to post the changes for review.

As far as I can see, only the change:
35f49a9cb fanotify01: Test setting two marks on different filesystems

tests for new v6.8-rc1 functionality, but it should not affect running the
test on older kernels, where the affected filesystems are skipped anyway.

Thanks,
Amir.
Petr Vorel Jan. 24, 2024, 3:33 p.m. UTC | #2
> On Wed, Jan 24, 2024 at 2:21 PM Petr Vorel <pvorel@suse.cz> wrote:

> > Found on kernel 6.7 (Tumbleweed) on exfat:

> > tst_test.c:1669: TINFO: === Testing on exfat ===
> > tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
> > tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fanoL9KLE/mntpoint fstyp=exfat flags=0
> > fanotify14.c:246: TINFO: Test case 0: fanotify_init(FAN_CLASS_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 1: fanotify_init(FAN_CLASS_PRE_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 2: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with INODE_EVENTS
> > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 3: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY)
> > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > fanotify14.c:283: TINFO: Testing FAN_MARK_MOUNT with INODE_EVENTS
> > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 4: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_NAME, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 5: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID | FAN_REPORT_NAME, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 6: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_NAME, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 7: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_FID, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 8: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_FID, O_RDONLY)
> > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_RENAME
> > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 9: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > fanotify14.c:283: TINFO: Testing FAN_MARK_ONLYDIR with FAN_OPEN
> > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > fanotify14.c:246: TINFO: Test case 10: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME_TARGET, O_RDONLY)
> > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_DELETE
> > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > fanotify14.c:303: TBROK: fanotify_mark(5, 0x101, 0x200, ..., mntpoint/file1) unsupported: EOPNOTSUPP (95)

> > Reported-by: Dominique Leuenberger <dleuenberger@suse.com>
> > Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > ---
> > Hi,

> > I wonder, if this is a bug or not.

> > Kind regards,
> > Petr

> >  testcases/kernel/syscalls/fanotify/fanotify.h | 12 +++++++++---
> >  1 file changed, 9 insertions(+), 3 deletions(-)

> > diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
> > index e0d178bcc..dd1f5c84c 100644
> > --- a/testcases/kernel/syscalls/fanotify/fanotify.h
> > +++ b/testcases/kernel/syscalls/fanotify/fanotify.h
> > @@ -47,9 +47,15 @@ static inline int safe_fanotify_mark(const char *file, const int lineno,
> >         rval = fanotify_mark(fd, flags, mask, dfd, pathname);

> >         if (rval == -1) {
> > -               tst_brk_(file, lineno, TBROK | TERRNO,
> > -                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> > -                        fd, flags, mask, pathname);
> > +               if (errno == EOPNOTSUPP) {
> > +                       tst_brk_(file, lineno, TCONF | TERRNO,
> > +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) unsupported",
> > +                                        fd, flags, mask, pathname);
> > +               } else {
> > +                       tst_brk_(file, lineno, TBROK | TERRNO,
> > +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> > +                                        fd, flags, mask, pathname);
> > +               }
> >         }

> >         if (rval < -1) {
> > --
> > 2.43.0


Hi Amir,

> Petr,

> I don't think this is the right fix.

> Am I correct to assume that exfat was skipped in this test prior
> to v6.8-rc1?
> 30ad1938326b fanotify: allow "weak" fsid when watching a single filesystem

Yes, it was skipped on 6.6:

tst_test.c:1669: TINFO: === Testing on exfat ===
tst_test.c:1117: TINFO: Formatting /dev/loop0 with exfat opts='' extra opts=''
tst_test.c:1131: TINFO: Mounting /dev/loop0 to /tmp/LTP_fany7fl22/mntpoint fstyp=exfat flags=0
fanotify14.c:323: TCONF: FAN_REPORT_FID not supported on exfat filesystem

> I have prepared a branch to test the v6.8-rc1 fanotify changes:

> https://github.com/amir73il/ltp/commits/fanotify_fsid/

> Normally, I post the tests much later in the a release cycle, but the changes
> in v6.8-rc1 will cause several new filesystems (e.g. fuse-ntfs3) to start
> running the fanotify tests, so we may need to merge some of those test
> fixes sooner.

+1

> Can you please test if the changes in my branch fix this test failure.
> Let me know if you need me to post the changes for review.

Yes, this your branch fanotify_fsid works on 6.7 from Tumbleweed.
Even cherry picking the commit 3fc9493eb ("fanotify{14,15,16}: Check for
filesystem mark support on filesystem") would be enough for now.

I can even do it without you sending a patch, if it's ok for you
(linking this discussion).

Kind regards,
Petr

> As far as I can see, only the change:
> 35f49a9cb fanotify01: Test setting two marks on different filesystems

> tests for new v6.8-rc1 functionality, but it should not affect running the
> test on older kernels, where the affected filesystems are skipped anyway.

> Thanks,
> Amir.
Jan Kara Jan. 24, 2024, 4:01 p.m. UTC | #3
On Wed 24-01-24 13:21:30, Petr Vorel wrote:
> Found on kernel 6.7 (Tumbleweed) on exfat:
> 
> tst_test.c:1669: TINFO: === Testing on exfat ===
> tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
> tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fanoL9KLE/mntpoint fstyp=exfat flags=0
> fanotify14.c:246: TINFO: Test case 0: fanotify_init(FAN_CLASS_CONTENT | FAN_REPORT_FID, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 1: fanotify_init(FAN_CLASS_PRE_CONTENT | FAN_REPORT_FID, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 2: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with INODE_EVENTS
> fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 3: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY)
> fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> fanotify14.c:283: TINFO: Testing FAN_MARK_MOUNT with INODE_EVENTS
> fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 4: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_NAME, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 5: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID | FAN_REPORT_NAME, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 6: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_NAME, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 7: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_FID, O_RDONLY)
> fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 8: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_FID, O_RDONLY)
> fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_RENAME
> fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> fanotify14.c:246: TINFO: Test case 9: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> fanotify14.c:283: TINFO: Testing FAN_MARK_ONLYDIR with FAN_OPEN
> fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> fanotify14.c:246: TINFO: Test case 10: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME_TARGET, O_RDONLY)
> fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_DELETE
> fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> fanotify14.c:303: TBROK: fanotify_mark(5, 0x101, 0x200, ..., mntpoint/file1) unsupported: EOPNOTSUPP (95)
> 
> Reported-by: Dominique Leuenberger <dleuenberger@suse.com>
> Signed-off-by: Petr Vorel <pvorel@suse.cz>

Thanks for looking into this. So EOPNOTSUPP is expected with a
FAN_MARK_FILESYSTEM because exfat does not have export operations and thus
cannot decode file handles (which is needed for sensible use of filesystem
marks). 

I think we should just ignore this failure in the test. Amir?

								Honza

> diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
> index e0d178bcc..dd1f5c84c 100644
> --- a/testcases/kernel/syscalls/fanotify/fanotify.h
> +++ b/testcases/kernel/syscalls/fanotify/fanotify.h
> @@ -47,9 +47,15 @@ static inline int safe_fanotify_mark(const char *file, const int lineno,
>  	rval = fanotify_mark(fd, flags, mask, dfd, pathname);
>  
>  	if (rval == -1) {
> -		tst_brk_(file, lineno, TBROK | TERRNO,
> -			 "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> -			 fd, flags, mask, pathname);
> +		if (errno == EOPNOTSUPP) {
> +			tst_brk_(file, lineno, TCONF | TERRNO,
> +					 "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) unsupported",
> +					 fd, flags, mask, pathname);
> +		} else {
> +			tst_brk_(file, lineno, TBROK | TERRNO,
> +					 "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> +					 fd, flags, mask, pathname);
> +		}
>  	}
>  
>  	if (rval < -1) {
> -- 
> 2.43.0
>
Amir Goldstein Jan. 24, 2024, 4:03 p.m. UTC | #4
On Wed, Jan 24, 2024 at 6:01 PM Jan Kara <jack@suse.cz> wrote:
>
> On Wed 24-01-24 13:21:30, Petr Vorel wrote:
> > Found on kernel 6.7 (Tumbleweed) on exfat:
> >
> > tst_test.c:1669: TINFO: === Testing on exfat ===
> > tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
> > tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fanoL9KLE/mntpoint fstyp=exfat flags=0
> > fanotify14.c:246: TINFO: Test case 0: fanotify_init(FAN_CLASS_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 1: fanotify_init(FAN_CLASS_PRE_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 2: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with INODE_EVENTS
> > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 3: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY)
> > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > fanotify14.c:283: TINFO: Testing FAN_MARK_MOUNT with INODE_EVENTS
> > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 4: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_NAME, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 5: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID | FAN_REPORT_NAME, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 6: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_NAME, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 7: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_FID, O_RDONLY)
> > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 8: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_FID, O_RDONLY)
> > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_RENAME
> > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > fanotify14.c:246: TINFO: Test case 9: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > fanotify14.c:283: TINFO: Testing FAN_MARK_ONLYDIR with FAN_OPEN
> > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > fanotify14.c:246: TINFO: Test case 10: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME_TARGET, O_RDONLY)
> > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_DELETE
> > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > fanotify14.c:303: TBROK: fanotify_mark(5, 0x101, 0x200, ..., mntpoint/file1) unsupported: EOPNOTSUPP (95)
> >
> > Reported-by: Dominique Leuenberger <dleuenberger@suse.com>
> > Signed-off-by: Petr Vorel <pvorel@suse.cz>
>
> Thanks for looking into this. So EOPNOTSUPP is expected with a
> FAN_MARK_FILESYSTEM because exfat does not have export operations and thus
> cannot decode file handles (which is needed for sensible use of filesystem
> marks).
>
> I think we should just ignore this failure in the test. Amir?

No. I already have sent patches to skip filesystem/mount marks
for those filesystems.

Thanks,
Amir.
Amir Goldstein Jan. 24, 2024, 4:05 p.m. UTC | #5
On Wed, Jan 24, 2024 at 5:33 PM Petr Vorel <pvorel@suse.cz> wrote:
>
> > On Wed, Jan 24, 2024 at 2:21 PM Petr Vorel <pvorel@suse.cz> wrote:
>
> > > Found on kernel 6.7 (Tumbleweed) on exfat:
>
> > > tst_test.c:1669: TINFO: === Testing on exfat ===
> > > tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
> > > tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fanoL9KLE/mntpoint fstyp=exfat flags=0
> > > fanotify14.c:246: TINFO: Test case 0: fanotify_init(FAN_CLASS_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > fanotify14.c:246: TINFO: Test case 1: fanotify_init(FAN_CLASS_PRE_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > fanotify14.c:246: TINFO: Test case 2: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with INODE_EVENTS
> > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > fanotify14.c:246: TINFO: Test case 3: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY)
> > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > fanotify14.c:283: TINFO: Testing FAN_MARK_MOUNT with INODE_EVENTS
> > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > fanotify14.c:246: TINFO: Test case 4: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_NAME, O_RDONLY)
> > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > fanotify14.c:246: TINFO: Test case 5: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID | FAN_REPORT_NAME, O_RDONLY)
> > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > fanotify14.c:246: TINFO: Test case 6: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_NAME, O_RDONLY)
> > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > fanotify14.c:246: TINFO: Test case 7: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_FID, O_RDONLY)
> > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > fanotify14.c:246: TINFO: Test case 8: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_FID, O_RDONLY)
> > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_RENAME
> > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > fanotify14.c:246: TINFO: Test case 9: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > fanotify14.c:283: TINFO: Testing FAN_MARK_ONLYDIR with FAN_OPEN
> > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > > fanotify14.c:246: TINFO: Test case 10: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME_TARGET, O_RDONLY)
> > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_DELETE
> > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > > fanotify14.c:303: TBROK: fanotify_mark(5, 0x101, 0x200, ..., mntpoint/file1) unsupported: EOPNOTSUPP (95)
>
> > > Reported-by: Dominique Leuenberger <dleuenberger@suse.com>
> > > Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > > ---
> > > Hi,
>
> > > I wonder, if this is a bug or not.
>
> > > Kind regards,
> > > Petr
>
> > >  testcases/kernel/syscalls/fanotify/fanotify.h | 12 +++++++++---
> > >  1 file changed, 9 insertions(+), 3 deletions(-)
>
> > > diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
> > > index e0d178bcc..dd1f5c84c 100644
> > > --- a/testcases/kernel/syscalls/fanotify/fanotify.h
> > > +++ b/testcases/kernel/syscalls/fanotify/fanotify.h
> > > @@ -47,9 +47,15 @@ static inline int safe_fanotify_mark(const char *file, const int lineno,
> > >         rval = fanotify_mark(fd, flags, mask, dfd, pathname);
>
> > >         if (rval == -1) {
> > > -               tst_brk_(file, lineno, TBROK | TERRNO,
> > > -                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> > > -                        fd, flags, mask, pathname);
> > > +               if (errno == EOPNOTSUPP) {
> > > +                       tst_brk_(file, lineno, TCONF | TERRNO,
> > > +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) unsupported",
> > > +                                        fd, flags, mask, pathname);
> > > +               } else {
> > > +                       tst_brk_(file, lineno, TBROK | TERRNO,
> > > +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> > > +                                        fd, flags, mask, pathname);
> > > +               }
> > >         }
>
> > >         if (rval < -1) {
> > > --
> > > 2.43.0
>
>
> Hi Amir,
>
> > Petr,
>
> > I don't think this is the right fix.
>
> > Am I correct to assume that exfat was skipped in this test prior
> > to v6.8-rc1?
> > 30ad1938326b fanotify: allow "weak" fsid when watching a single filesystem
>
> Yes, it was skipped on 6.6:
>
> tst_test.c:1669: TINFO: === Testing on exfat ===
> tst_test.c:1117: TINFO: Formatting /dev/loop0 with exfat opts='' extra opts=''
> tst_test.c:1131: TINFO: Mounting /dev/loop0 to /tmp/LTP_fany7fl22/mntpoint fstyp=exfat flags=0
> fanotify14.c:323: TCONF: FAN_REPORT_FID not supported on exfat filesystem
>
> > I have prepared a branch to test the v6.8-rc1 fanotify changes:
>
> > https://github.com/amir73il/ltp/commits/fanotify_fsid/
>
> > Normally, I post the tests much later in the a release cycle, but the changes
> > in v6.8-rc1 will cause several new filesystems (e.g. fuse-ntfs3) to start
> > running the fanotify tests, so we may need to merge some of those test
> > fixes sooner.
>
> +1
>
> > Can you please test if the changes in my branch fix this test failure.
> > Let me know if you need me to post the changes for review.
>
> Yes, this your branch fanotify_fsid works on 6.7 from Tumbleweed.

Ah yes, this is because 6.7 has commit:

64343119d7b8 exportfs: support encoding non-decodeable file handles by default

This is different form the one I mentioned for v6.8-rc1


> Even cherry picking the commit 3fc9493eb ("fanotify{14,15,16}: Check for
> filesystem mark support on filesystem") would be enough for now.
>
> I can even do it without you sending a patch, if it's ok for you
> (linking this discussion).
>

Perfectly fine by me.

But note that you need the rest of the fixes to avoid test failures with
fuse (e.g. fuse-ntfs3g) on v6.8-rc1 - if you care about LTP results on
latest rc kernel.

Thanks,
Amir.
Petr Vorel Jan. 24, 2024, 4:58 p.m. UTC | #6
> On Wed, Jan 24, 2024 at 5:33 PM Petr Vorel <pvorel@suse.cz> wrote:

> > > On Wed, Jan 24, 2024 at 2:21 PM Petr Vorel <pvorel@suse.cz> wrote:

> > > > Found on kernel 6.7 (Tumbleweed) on exfat:

> > > > tst_test.c:1669: TINFO: === Testing on exfat ===
> > > > tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
> > > > tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fanoL9KLE/mntpoint fstyp=exfat flags=0
> > > > fanotify14.c:246: TINFO: Test case 0: fanotify_init(FAN_CLASS_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 1: fanotify_init(FAN_CLASS_PRE_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 2: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with INODE_EVENTS
> > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 3: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY)
> > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > fanotify14.c:283: TINFO: Testing FAN_MARK_MOUNT with INODE_EVENTS
> > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 4: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_NAME, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 5: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID | FAN_REPORT_NAME, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 6: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_NAME, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 7: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_FID, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 8: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_FID, O_RDONLY)
> > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_RENAME
> > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 9: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > fanotify14.c:283: TINFO: Testing FAN_MARK_ONLYDIR with FAN_OPEN
> > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > > > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > > > fanotify14.c:246: TINFO: Test case 10: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME_TARGET, O_RDONLY)
> > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_DELETE
> > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > > > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > > > fanotify14.c:303: TBROK: fanotify_mark(5, 0x101, 0x200, ..., mntpoint/file1) unsupported: EOPNOTSUPP (95)

> > > > Reported-by: Dominique Leuenberger <dleuenberger@suse.com>
> > > > Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > > > ---
> > > > Hi,

> > > > I wonder, if this is a bug or not.

> > > > Kind regards,
> > > > Petr

> > > >  testcases/kernel/syscalls/fanotify/fanotify.h | 12 +++++++++---
> > > >  1 file changed, 9 insertions(+), 3 deletions(-)

> > > > diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
> > > > index e0d178bcc..dd1f5c84c 100644
> > > > --- a/testcases/kernel/syscalls/fanotify/fanotify.h
> > > > +++ b/testcases/kernel/syscalls/fanotify/fanotify.h
> > > > @@ -47,9 +47,15 @@ static inline int safe_fanotify_mark(const char *file, const int lineno,
> > > >         rval = fanotify_mark(fd, flags, mask, dfd, pathname);

> > > >         if (rval == -1) {
> > > > -               tst_brk_(file, lineno, TBROK | TERRNO,
> > > > -                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> > > > -                        fd, flags, mask, pathname);
> > > > +               if (errno == EOPNOTSUPP) {
> > > > +                       tst_brk_(file, lineno, TCONF | TERRNO,
> > > > +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) unsupported",
> > > > +                                        fd, flags, mask, pathname);
> > > > +               } else {
> > > > +                       tst_brk_(file, lineno, TBROK | TERRNO,
> > > > +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> > > > +                                        fd, flags, mask, pathname);
> > > > +               }
> > > >         }

> > > >         if (rval < -1) {
> > > > --
> > > > 2.43.0


> > Hi Amir,

> > > Petr,

> > > I don't think this is the right fix.

> > > Am I correct to assume that exfat was skipped in this test prior
> > > to v6.8-rc1?
> > > 30ad1938326b fanotify: allow "weak" fsid when watching a single filesystem

> > Yes, it was skipped on 6.6:

> > tst_test.c:1669: TINFO: === Testing on exfat ===
> > tst_test.c:1117: TINFO: Formatting /dev/loop0 with exfat opts='' extra opts=''
> > tst_test.c:1131: TINFO: Mounting /dev/loop0 to /tmp/LTP_fany7fl22/mntpoint fstyp=exfat flags=0
> > fanotify14.c:323: TCONF: FAN_REPORT_FID not supported on exfat filesystem

> > > I have prepared a branch to test the v6.8-rc1 fanotify changes:

> > > https://github.com/amir73il/ltp/commits/fanotify_fsid/

> > > Normally, I post the tests much later in the a release cycle, but the changes
> > > in v6.8-rc1 will cause several new filesystems (e.g. fuse-ntfs3) to start
> > > running the fanotify tests, so we may need to merge some of those test
> > > fixes sooner.

> > +1

> > > Can you please test if the changes in my branch fix this test failure.
> > > Let me know if you need me to post the changes for review.

> > Yes, this your branch fanotify_fsid works on 6.7 from Tumbleweed.

> Ah yes, this is because 6.7 has commit:

> 64343119d7b8 exportfs: support encoding non-decodeable file handles by default

> This is different form the one I mentioned for v6.8-rc1


> > Even cherry picking the commit 3fc9493eb ("fanotify{14,15,16}: Check for
> > filesystem mark support on filesystem") would be enough for now.

> > I can even do it without you sending a patch, if it's ok for you
> > (linking this discussion).


> Perfectly fine by me.

> But note that you need the rest of the fixes to avoid test failures with
> fuse (e.g. fuse-ntfs3g) on v6.8-rc1 - if you care about LTP results on
> latest rc kernel.

OK, in that case I merge whole branch tonight.

Kind regards,
Petr

> Thanks,
> Amir.
Petr Vorel Jan. 24, 2024, 7:42 p.m. UTC | #7
> On Wed, Jan 24, 2024 at 5:33 PM Petr Vorel <pvorel@suse.cz> wrote:

> > > On Wed, Jan 24, 2024 at 2:21 PM Petr Vorel <pvorel@suse.cz> wrote:

> > > > Found on kernel 6.7 (Tumbleweed) on exfat:

> > > > tst_test.c:1669: TINFO: === Testing on exfat ===
> > > > tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
> > > > tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fanoL9KLE/mntpoint fstyp=exfat flags=0
> > > > fanotify14.c:246: TINFO: Test case 0: fanotify_init(FAN_CLASS_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 1: fanotify_init(FAN_CLASS_PRE_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 2: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with INODE_EVENTS
> > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 3: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY)
> > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > fanotify14.c:283: TINFO: Testing FAN_MARK_MOUNT with INODE_EVENTS
> > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 4: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_NAME, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 5: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID | FAN_REPORT_NAME, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 6: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_NAME, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 7: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_FID, O_RDONLY)
> > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 8: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_FID, O_RDONLY)
> > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_RENAME
> > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > > fanotify14.c:246: TINFO: Test case 9: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > fanotify14.c:283: TINFO: Testing FAN_MARK_ONLYDIR with FAN_OPEN
> > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > > > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > > > fanotify14.c:246: TINFO: Test case 10: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME_TARGET, O_RDONLY)
> > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_DELETE
> > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > > > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > > > fanotify14.c:303: TBROK: fanotify_mark(5, 0x101, 0x200, ..., mntpoint/file1) unsupported: EOPNOTSUPP (95)

> > > > Reported-by: Dominique Leuenberger <dleuenberger@suse.com>
> > > > Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > > > ---
> > > > Hi,

> > > > I wonder, if this is a bug or not.

> > > > Kind regards,
> > > > Petr

> > > >  testcases/kernel/syscalls/fanotify/fanotify.h | 12 +++++++++---
> > > >  1 file changed, 9 insertions(+), 3 deletions(-)

> > > > diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
> > > > index e0d178bcc..dd1f5c84c 100644
> > > > --- a/testcases/kernel/syscalls/fanotify/fanotify.h
> > > > +++ b/testcases/kernel/syscalls/fanotify/fanotify.h
> > > > @@ -47,9 +47,15 @@ static inline int safe_fanotify_mark(const char *file, const int lineno,
> > > >         rval = fanotify_mark(fd, flags, mask, dfd, pathname);

> > > >         if (rval == -1) {
> > > > -               tst_brk_(file, lineno, TBROK | TERRNO,
> > > > -                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> > > > -                        fd, flags, mask, pathname);
> > > > +               if (errno == EOPNOTSUPP) {
> > > > +                       tst_brk_(file, lineno, TCONF | TERRNO,
> > > > +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) unsupported",
> > > > +                                        fd, flags, mask, pathname);
> > > > +               } else {
> > > > +                       tst_brk_(file, lineno, TBROK | TERRNO,
> > > > +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> > > > +                                        fd, flags, mask, pathname);
> > > > +               }
> > > >         }

> > > >         if (rval < -1) {
> > > > --
> > > > 2.43.0


> > Hi Amir,

> > > Petr,

> > > I don't think this is the right fix.

> > > Am I correct to assume that exfat was skipped in this test prior
> > > to v6.8-rc1?
> > > 30ad1938326b fanotify: allow "weak" fsid when watching a single filesystem

> > Yes, it was skipped on 6.6:

> > tst_test.c:1669: TINFO: === Testing on exfat ===
> > tst_test.c:1117: TINFO: Formatting /dev/loop0 with exfat opts='' extra opts=''
> > tst_test.c:1131: TINFO: Mounting /dev/loop0 to /tmp/LTP_fany7fl22/mntpoint fstyp=exfat flags=0
> > fanotify14.c:323: TCONF: FAN_REPORT_FID not supported on exfat filesystem

> > > I have prepared a branch to test the v6.8-rc1 fanotify changes:

> > > https://github.com/amir73il/ltp/commits/fanotify_fsid/

> > > Normally, I post the tests much later in the a release cycle, but the changes
> > > in v6.8-rc1 will cause several new filesystems (e.g. fuse-ntfs3) to start
> > > running the fanotify tests, so we may need to merge some of those test
> > > fixes sooner.

> > +1

> > > Can you please test if the changes in my branch fix this test failure.
> > > Let me know if you need me to post the changes for review.

> > Yes, this your branch fanotify_fsid works on 6.7 from Tumbleweed.

> Ah yes, this is because 6.7 has commit:

> 64343119d7b8 exportfs: support encoding non-decodeable file handles by default

> This is different form the one I mentioned for v6.8-rc1


> > Even cherry picking the commit 3fc9493eb ("fanotify{14,15,16}: Check for
> > filesystem mark support on filesystem") would be enough for now.

> > I can even do it without you sending a patch, if it's ok for you
> > (linking this discussion).


> Perfectly fine by me.

> But note that you need the rest of the fixes to avoid test failures with
> fuse (e.g. fuse-ntfs3g) on v6.8-rc1 - if you care about LTP results on
> latest rc kernel.

NOTE: I would do care but the 2nd commit ("fanotify01: Test setting two marks on
different filesystems") fails at least on 6.7.0 (see below). I'm testing whole
patchset and just commit fixing "fanotify{14,15,16}" and report if more
failures. I'll probably merge now just that single fixing commit.

BTW we have git freeze, planning to release LTP sometimes next week. It would be
great to have working even v6.8-rc1, but understand if you don't have much time
for it.

Kind regards,
Petr

# LTP_SINGLE_FS_TYPE=exfat ./fanotify01 
tst_device.c:96: TINFO: Found free device 1 '/dev/loop1'
tst_test.c:1709: TINFO: LTP version: 20230929-298-gc808a4732
tst_test.c:1593: TINFO: Timeout per run is 0h 00m 30s
tst_supported_fs_types.c:161: TINFO: WARNING: testing only exfat
tst_supported_fs_types.c:97: TINFO: Kernel supports exfat
tst_supported_fs_types.c:62: TINFO: mkfs.exfat does exist
tst_test.c:1669: TINFO: === Testing on exfat ===
tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fan1CYAik/fs_mnt fstyp=exfat flags=0
fanotify01.c:94: TINFO: Test #0: inode mark events
fanotify01.c:301: TPASS: got event: mask=31 pid=10048 fd=4
fanotify01.c:301: TPASS: got event: mask=11 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=10 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=2a pid=10048 fd=5
fanotify01.c:301: TPASS: got event: mask=a pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=20 pid=10048 fd=7
fanotify01.c:301: TPASS: got event: mask=b pid=10048 fd=6
fanotify01.c:301: TPASS: got event: mask=9 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=2 pid=10048 fd=9
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=8
fanotify01.c:339: TPASS: fanotify_mark(fd_notify, 0x00000001, 0x00000008, -100, ".") returned fd 0
fanotify01.c:94: TINFO: Test #1: mount mark events
fanotify01.c:301: TPASS: got event: mask=31 pid=10048 fd=4
fanotify01.c:301: TPASS: got event: mask=11 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=10 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=2a pid=10048 fd=5
fanotify01.c:301: TPASS: got event: mask=a pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=20 pid=10048 fd=7
fanotify01.c:301: TPASS: got event: mask=b pid=10048 fd=6
fanotify01.c:301: TPASS: got event: mask=9 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=2 pid=10048 fd=9
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=8
fanotify01.c:339: TPASS: fanotify_mark(fd_notify, 0x00000001, 0x00000008, -100, ".") returned fd 0
fanotify01.c:94: TINFO: Test #2: filesystem mark events
fanotify01.c:301: TPASS: got event: mask=31 pid=10048 fd=4
fanotify01.c:301: TPASS: got event: mask=11 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=10 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=2a pid=10048 fd=5
fanotify01.c:301: TPASS: got event: mask=a pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=20 pid=10048 fd=7
fanotify01.c:301: TPASS: got event: mask=b pid=10048 fd=6
fanotify01.c:301: TPASS: got event: mask=9 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=2 pid=10048 fd=9
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=8
fanotify01.c:339: TPASS: fanotify_mark(fd_notify, 0x00000001, 0x00000008, -100, ".") returned fd 0
fanotify01.c:94: TINFO: Test #3: inode mark events (FAN_REPORT_FID)
fanotify01.c:301: TPASS: got event: mask=31 pid=10048 fd=-1
fanotify01.c:301: TPASS: got event: mask=11 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=10 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=2a pid=10048 fd=-1
fanotify01.c:301: TPASS: got event: mask=a pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=20 pid=10048 fd=-1
fanotify01.c:301: TPASS: got event: mask=b pid=10048 fd=-1
fanotify01.c:301: TPASS: got event: mask=9 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
fanotify01.c:301: TPASS: got event: mask=2 pid=10048 fd=-1
fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-1
fanotify01.c:339: TFAIL: fanotify_mark(fd_notify, 0x00000001, 0x00000008, -100, ".") succeeded
fanotify01.c:94: TINFO: Test #4: mount mark events (FAN_REPORT_FID)
fanotify01.c:107: TCONF: FAN_MARK_MOUNT not supported on exfat filesystem
fanotify01.c:94: TINFO: Test #5: filesystem mark events (FAN_REPORT_FID)
fanotify01.c:107: TCONF: FAN_MARK_FILESYSTEM not supported on exfat filesystem

Summary:
passed   51
failed   1
broken   0
skipped  2
warnings 0


> Thanks,
> Amir.
Petr Vorel Jan. 24, 2024, 8:51 p.m. UTC | #8
> > On Wed, Jan 24, 2024 at 5:33 PM Petr Vorel <pvorel@suse.cz> wrote:

> > > > On Wed, Jan 24, 2024 at 2:21 PM Petr Vorel <pvorel@suse.cz> wrote:

> > > > > Found on kernel 6.7 (Tumbleweed) on exfat:

> > > > > tst_test.c:1669: TINFO: === Testing on exfat ===
> > > > > tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
> > > > > tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fanoL9KLE/mntpoint fstyp=exfat flags=0
> > > > > fanotify14.c:246: TINFO: Test case 0: fanotify_init(FAN_CLASS_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > > fanotify14.c:246: TINFO: Test case 1: fanotify_init(FAN_CLASS_PRE_CONTENT | FAN_REPORT_FID, O_RDONLY)
> > > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > > fanotify14.c:246: TINFO: Test case 2: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with INODE_EVENTS
> > > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > > > fanotify14.c:246: TINFO: Test case 3: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY)
> > > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > > fanotify14.c:283: TINFO: Testing FAN_MARK_MOUNT with INODE_EVENTS
> > > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > > > fanotify14.c:246: TINFO: Test case 4: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_NAME, O_RDONLY)
> > > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > > fanotify14.c:246: TINFO: Test case 5: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID | FAN_REPORT_NAME, O_RDONLY)
> > > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > > fanotify14.c:246: TINFO: Test case 6: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_NAME, O_RDONLY)
> > > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > > fanotify14.c:246: TINFO: Test case 7: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_TARGET_FID | FAN_REPORT_DFID_FID, O_RDONLY)
> > > > > fanotify14.c:260: TPASS: fanotify_init(tc->init.flags, O_RDONLY) : EINVAL (22)
> > > > > fanotify14.c:246: TINFO: Test case 8: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_FID, O_RDONLY)
> > > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_RENAME
> > > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : EINVAL (22)
> > > > > fanotify14.c:246: TINFO: Test case 9: fanotify_init(FAN_CLASS_NOTIF, O_RDONLY)
> > > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > > fanotify14.c:283: TINFO: Testing FAN_MARK_ONLYDIR with FAN_OPEN
> > > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > > > > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > > > > fanotify14.c:246: TINFO: Test case 10: fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME_TARGET, O_RDONLY)
> > > > > fanotify14.c:263: TPASS: fanotify_init(tc->init.flags, O_RDONLY) returned fd 5
> > > > > fanotify14.c:283: TINFO: Testing FAN_MARK_INODE with FAN_DELETE
> > > > > fanotify14.c:285: TPASS: fanotify_mark(fanotify_fd, 0x00000001 | tc->mark.flags, tc->mask.flags, dirfd, path) : ENOTDIR (20)
> > > > > fanotify14.c:298: TPASS: Adding an inode mark on directory did not fail with ENOTDIR error as on non-dir inode
> > > > > fanotify14.c:303: TBROK: fanotify_mark(5, 0x101, 0x200, ..., mntpoint/file1) unsupported: EOPNOTSUPP (95)

> > > > > Reported-by: Dominique Leuenberger <dleuenberger@suse.com>
> > > > > Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > > > > ---
> > > > > Hi,

> > > > > I wonder, if this is a bug or not.

> > > > > Kind regards,
> > > > > Petr

> > > > >  testcases/kernel/syscalls/fanotify/fanotify.h | 12 +++++++++---
> > > > >  1 file changed, 9 insertions(+), 3 deletions(-)

> > > > > diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
> > > > > index e0d178bcc..dd1f5c84c 100644
> > > > > --- a/testcases/kernel/syscalls/fanotify/fanotify.h
> > > > > +++ b/testcases/kernel/syscalls/fanotify/fanotify.h
> > > > > @@ -47,9 +47,15 @@ static inline int safe_fanotify_mark(const char *file, const int lineno,
> > > > >         rval = fanotify_mark(fd, flags, mask, dfd, pathname);

> > > > >         if (rval == -1) {
> > > > > -               tst_brk_(file, lineno, TBROK | TERRNO,
> > > > > -                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> > > > > -                        fd, flags, mask, pathname);
> > > > > +               if (errno == EOPNOTSUPP) {
> > > > > +                       tst_brk_(file, lineno, TCONF | TERRNO,
> > > > > +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) unsupported",
> > > > > +                                        fd, flags, mask, pathname);
> > > > > +               } else {
> > > > > +                       tst_brk_(file, lineno, TBROK | TERRNO,
> > > > > +                                        "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
> > > > > +                                        fd, flags, mask, pathname);
> > > > > +               }
> > > > >         }

> > > > >         if (rval < -1) {
> > > > > --
> > > > > 2.43.0


> > > Hi Amir,

> > > > Petr,

> > > > I don't think this is the right fix.

> > > > Am I correct to assume that exfat was skipped in this test prior
> > > > to v6.8-rc1?
> > > > 30ad1938326b fanotify: allow "weak" fsid when watching a single filesystem

> > > Yes, it was skipped on 6.6:

> > > tst_test.c:1669: TINFO: === Testing on exfat ===
> > > tst_test.c:1117: TINFO: Formatting /dev/loop0 with exfat opts='' extra opts=''
> > > tst_test.c:1131: TINFO: Mounting /dev/loop0 to /tmp/LTP_fany7fl22/mntpoint fstyp=exfat flags=0
> > > fanotify14.c:323: TCONF: FAN_REPORT_FID not supported on exfat filesystem

> > > > I have prepared a branch to test the v6.8-rc1 fanotify changes:

> > > > https://github.com/amir73il/ltp/commits/fanotify_fsid/

> > > > Normally, I post the tests much later in the a release cycle, but the changes
> > > > in v6.8-rc1 will cause several new filesystems (e.g. fuse-ntfs3) to start
> > > > running the fanotify tests, so we may need to merge some of those test
> > > > fixes sooner.

> > > +1

> > > > Can you please test if the changes in my branch fix this test failure.
> > > > Let me know if you need me to post the changes for review.

> > > Yes, this your branch fanotify_fsid works on 6.7 from Tumbleweed.

> > Ah yes, this is because 6.7 has commit:

> > 64343119d7b8 exportfs: support encoding non-decodeable file handles by default

> > This is different form the one I mentioned for v6.8-rc1


> > > Even cherry picking the commit 3fc9493eb ("fanotify{14,15,16}: Check for
> > > filesystem mark support on filesystem") would be enough for now.

> > > I can even do it without you sending a patch, if it's ok for you
> > > (linking this discussion).


> > Perfectly fine by me.

> > But note that you need the rest of the fixes to avoid test failures with
> > fuse (e.g. fuse-ntfs3g) on v6.8-rc1 - if you care about LTP results on
> > latest rc kernel.

> NOTE: I would do care but the 2nd commit ("fanotify01: Test setting two marks on
> different filesystems") fails at least on 6.7.0 (see below). I'm testing whole
> patchset and just commit fixing "fanotify{14,15,16}" and report if more
> failures. I'll probably merge now just that single fixing commit.

Due these problems I merged the other patches (all but these 2 which touched
fanotify01).

Thanks!

Kind regards,
Petr

> BTW we have git freeze, planning to release LTP sometimes next week. It would be
> great to have working even v6.8-rc1, but understand if you don't have much time
> for it.

> Kind regards,
> Petr

> # LTP_SINGLE_FS_TYPE=exfat ./fanotify01 
> tst_device.c:96: TINFO: Found free device 1 '/dev/loop1'
> tst_test.c:1709: TINFO: LTP version: 20230929-298-gc808a4732
> tst_test.c:1593: TINFO: Timeout per run is 0h 00m 30s
> tst_supported_fs_types.c:161: TINFO: WARNING: testing only exfat
> tst_supported_fs_types.c:97: TINFO: Kernel supports exfat
> tst_supported_fs_types.c:62: TINFO: mkfs.exfat does exist
> tst_test.c:1669: TINFO: === Testing on exfat ===
> tst_test.c:1117: TINFO: Formatting /dev/loop1 with exfat opts='' extra opts=''
> tst_test.c:1131: TINFO: Mounting /dev/loop1 to /tmp/LTP_fan1CYAik/fs_mnt fstyp=exfat flags=0
> fanotify01.c:94: TINFO: Test #0: inode mark events
> fanotify01.c:301: TPASS: got event: mask=31 pid=10048 fd=4
> fanotify01.c:301: TPASS: got event: mask=11 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=10 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=2a pid=10048 fd=5
> fanotify01.c:301: TPASS: got event: mask=a pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=20 pid=10048 fd=7
> fanotify01.c:301: TPASS: got event: mask=b pid=10048 fd=6
> fanotify01.c:301: TPASS: got event: mask=9 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=2 pid=10048 fd=9
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=8
> fanotify01.c:339: TPASS: fanotify_mark(fd_notify, 0x00000001, 0x00000008, -100, ".") returned fd 0
> fanotify01.c:94: TINFO: Test #1: mount mark events
> fanotify01.c:301: TPASS: got event: mask=31 pid=10048 fd=4
> fanotify01.c:301: TPASS: got event: mask=11 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=10 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=2a pid=10048 fd=5
> fanotify01.c:301: TPASS: got event: mask=a pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=20 pid=10048 fd=7
> fanotify01.c:301: TPASS: got event: mask=b pid=10048 fd=6
> fanotify01.c:301: TPASS: got event: mask=9 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=2 pid=10048 fd=9
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=8
> fanotify01.c:339: TPASS: fanotify_mark(fd_notify, 0x00000001, 0x00000008, -100, ".") returned fd 0
> fanotify01.c:94: TINFO: Test #2: filesystem mark events
> fanotify01.c:301: TPASS: got event: mask=31 pid=10048 fd=4
> fanotify01.c:301: TPASS: got event: mask=11 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=10 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=2a pid=10048 fd=5
> fanotify01.c:301: TPASS: got event: mask=a pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=20 pid=10048 fd=7
> fanotify01.c:301: TPASS: got event: mask=b pid=10048 fd=6
> fanotify01.c:301: TPASS: got event: mask=9 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=2 pid=10048 fd=9
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=8
> fanotify01.c:339: TPASS: fanotify_mark(fd_notify, 0x00000001, 0x00000008, -100, ".") returned fd 0
> fanotify01.c:94: TINFO: Test #3: inode mark events (FAN_REPORT_FID)
> fanotify01.c:301: TPASS: got event: mask=31 pid=10048 fd=-1
> fanotify01.c:301: TPASS: got event: mask=11 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=10 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=2a pid=10048 fd=-1
> fanotify01.c:301: TPASS: got event: mask=a pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=20 pid=10048 fd=-1
> fanotify01.c:301: TPASS: got event: mask=b pid=10048 fd=-1
> fanotify01.c:301: TPASS: got event: mask=9 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-2
> fanotify01.c:301: TPASS: got event: mask=2 pid=10048 fd=-1
> fanotify01.c:301: TPASS: got event: mask=8 pid=10048 fd=-1
> fanotify01.c:339: TFAIL: fanotify_mark(fd_notify, 0x00000001, 0x00000008, -100, ".") succeeded
> fanotify01.c:94: TINFO: Test #4: mount mark events (FAN_REPORT_FID)
> fanotify01.c:107: TCONF: FAN_MARK_MOUNT not supported on exfat filesystem
> fanotify01.c:94: TINFO: Test #5: filesystem mark events (FAN_REPORT_FID)
> fanotify01.c:107: TCONF: FAN_MARK_FILESYSTEM not supported on exfat filesystem

> Summary:
> passed   51
> failed   1
> broken   0
> skipped  2
> warnings 0


> > Thanks,
> > Amir.
Amir Goldstein Jan. 25, 2024, 10:52 a.m. UTC | #9
> > > But note that you need the rest of the fixes to avoid test failures with
> > > fuse (e.g. fuse-ntfs3g) on v6.8-rc1 - if you care about LTP results on
> > > latest rc kernel.
>
> > NOTE: I would do care but the 2nd commit ("fanotify01: Test setting two marks on
> > different filesystems") fails at least on 6.7.0 (see below). I'm testing whole
> > patchset and just commit fixing "fanotify{14,15,16}" and report if more
> > failures. I'll probably merge now just that single fixing commit.
>
> Due these problems I merged the other patches (all but these 2 which touched
> fanotify01).

I think this was the right choice for code freeze, because the fanotify01 commit
is for testing new functionality.

However, if I am not mistaken, regardless of the new addition in fanotify01,
you will also get test failures on v6.8-rc1 when running with
LTP_DEV_FS_TYPE=exfat.

I pushed another fix to fanotify_fsid branch:

 3cc948c92 fanotify{01,09,10}: Check for report fid support with mount mark

Similar to the fix for tests fanotify{14,15,16} which are run on
all_filesystems.

I also fixed the problem you reported with exfat on fanotify01 in the
commit introducing the extra check.

I will post it for review, since I now tested it on v6.8-rc1.

Thanks,
Amir.
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
index e0d178bcc..dd1f5c84c 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify.h
+++ b/testcases/kernel/syscalls/fanotify/fanotify.h
@@ -47,9 +47,15 @@  static inline int safe_fanotify_mark(const char *file, const int lineno,
 	rval = fanotify_mark(fd, flags, mask, dfd, pathname);
 
 	if (rval == -1) {
-		tst_brk_(file, lineno, TBROK | TERRNO,
-			 "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
-			 fd, flags, mask, pathname);
+		if (errno == EOPNOTSUPP) {
+			tst_brk_(file, lineno, TCONF | TERRNO,
+					 "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) unsupported",
+					 fd, flags, mask, pathname);
+		} else {
+			tst_brk_(file, lineno, TBROK | TERRNO,
+					 "fanotify_mark(%d, 0x%x, 0x%lx, ..., %s) failed",
+					 fd, flags, mask, pathname);
+		}
 	}
 
 	if (rval < -1) {