mirror_zfs/lib/libzfs
Ameer Hamza 1eace59060
libzfs: use mount_setattr for selective remount including legacy mounts
When a namespace property is changed via zfs set, libzfs remounts the
filesystem to propagate the new VFS mount flags. The current approach
uses mount(2) with MS_REMOUNT, which reads all namespace properties
from ZFS and applies them together. This has two problems:

1. Linux VFS resets unspecified per-mount flags on remount. If an
   administrator sets a temporary flag (e.g. mount -o remount,noatime),
   a subsequent zfs set on any namespace property clobbers it.

2. Two concurrent zfs set operations on different namespace properties
   can overwrite each other's mount flags.

Additionally, legacy datasets (mountpoint=legacy) were never remounted
on namespace property changes since zfs_is_mountable() returns false
for them.

Add zfs_mount_setattr() which uses mount_setattr(2) to selectively
update only the mount flags that correspond to the changed property.
For legacy datasets, /proc/mounts is iterated to update all
mountpoints. On kernels without mount_setattr (ENOSYS), non-legacy
datasets fall back to a full remount; legacy mounts are skipped to
avoid clobbering temporary flags.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com>
Signed-off-by: Ameer Hamza <ahamza@ixsystems.com>
Closes #18257
2026-03-09 11:06:22 -07:00
..
os libzfs: use mount_setattr for selective remount including legacy mounts 2026-03-09 11:06:22 -07:00
.gitignore Clean up lib dependencies 2020-07-10 14:26:00 -07:00
libzfs_changelist.c zfs: replace uu_avl with sys/avl 2025-11-17 06:21:26 -08:00
libzfs_config.c zfs: replace uu_avl with sys/avl 2025-11-17 06:21:26 -08:00
libzfs_crypto.c libzpool: remove global libzpool includes 2025-11-12 10:03:15 -08:00
libzfs_dataset.c libzfs: use mount_setattr for selective remount including legacy mounts 2026-03-09 11:06:22 -07:00
libzfs_diff.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
libzfs_impl.h libzfs: use mount_setattr for selective remount including legacy mounts 2026-03-09 11:06:22 -07:00
libzfs_import.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
libzfs_iter.c Sort the blocking snapshots list #12751 (#17264) 2025-05-01 17:40:23 -07:00
libzfs_mount.c libzfs: use mount_setattr for selective remount including legacy mounts 2026-03-09 11:06:22 -07:00
libzfs_pool.c libzfs: handle EDOM error in zpool_create 2026-03-08 12:59:10 -07:00
libzfs_sendrecv.c Implement lzc_send_progress 2026-03-06 11:05:58 -08:00
libzfs_share_nfs.c libshare: fold into libzfs and reorg headers a little 2025-12-19 19:52:33 -08:00
libzfs_share.c libshare: fold into libzfs and reorg headers a little 2025-12-19 19:52:33 -08:00
libzfs_share.h libshare: fold into libzfs and reorg headers a little 2025-12-19 19:52:33 -08:00
libzfs_status.c Suppress some ashift warnings 2025-10-13 10:41:42 -07:00
libzfs_util.c Detect a slow raidz child during reads 2025-09-10 15:25:03 -07:00
libzfs.abi Add zpool properties for allocation class space 2026-03-02 15:50:23 -08:00
libzfs.pc.in Spruce up pkg-config files for libzfs/libzfs_core 2020-09-04 11:11:18 -07:00
libzfs.suppr Library ABI tracking with abigail 2020-11-17 09:18:52 -08:00
Makefile.am Move range_tree, btree, highbit64 to common code 2026-02-22 11:43:51 -08:00
THIRDPARTYLICENSE.openssl Fix typos in lib/ 2019-09-02 17:53:27 -07:00
THIRDPARTYLICENSE.openssl.descrip Encryption patch follow-up 2017-10-11 16:54:48 -04:00