Re: [PATCH v4 4/9] fstests: verify fanotify isolation on cloned filesystems
Anand Jain <[email protected]>
| Newsgroups | org.kernel.vger.fstests,org.kernel.vger.linux-btrfs,org.kernel.vger.linux-ext4,org.kernel.vger.linux-xfs |
|---|---|
| Message-ID | <[email protected]> |
On 12/5/26 13:38, Christoph Hellwig wrote:
> On Tue, Apr 28, 2026 at 02:42:54PM +0800, Anand Jain wrote:
>> Verify that fanotify events are correctly routed to the appropriate
>> watcher when cloned filesystems are mounted.
>> Helps verify kernel's event notification distinguishes between devices
>> sharing the same FSID/UUID.
>
> Do these tests pass with all major file systems? Or does this reproduce
> the previous btrfs issues in this area?
Yes. The major FSs (BTRFS, EXT4, XFS, and F2FS) all pass, except
EXT4 does not run `generic/801` because statfs `f_fsid` is not
unique when the cloned FS is mounted. Also, BTRFS requires the
kernel patch mentioned in test cases `generic/802` and `generic/804`.
`generic/801` fails in an SELinux environment; this can be
fixed with the following changes in `generic/801` I'll add
this change in v5.
-------
diff --git a/tests/generic/801 b/tests/generic/801
index e1282f4e3d71..384e82120d4e 100644
--- a/tests/generic/801
+++ b/tests/generic/801
@@ -23,6 +23,10 @@ _cleanup()
umount $mnt1 $mnt2 2>/dev/null
_loop_image_destroy "${devs[@]}" 2> /dev/null
rm -r -f $tmp.*
+
+ if [ -n "$old_selinux_state" ]; then
+ setenforce "$old_selinux_state"
+ fi
}
monitor_fanotify()
@@ -49,6 +53,14 @@ mnt2=$TEST_DIR/$seq/mnt2
mkdir -p $mnt1
mkdir -p $mnt2
+# Setting SELINUX_MOUNT_OPTIONS to null still fails fanotify with
+# permission failure, so set SELinux to permissive if it is enforcing.
+if command -v getenforce &>/dev/null && [ "$(getenforce)" = "Enforcing"
]; then
+ old_selinux_state="Enforcing"
+ setenforce Permissive
+else
+ old_selinux_state=""
+fi
_mount $(_common_dev_mount_options) $(_clone_mount_option) ${devs[0]}
$mnt1 || \
_fail "Failed to mount dev1"
_mount $(_common_dev_mount_options) $(_clone_mount_option) ${devs[1]}
$mnt2 || \
(END)
-------