mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-04-13 07:01:46 +03:00
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
44 lines
1.1 KiB
Plaintext
44 lines
1.1 KiB
Plaintext
dnl # SPDX-License-Identifier: CDDL-1.0
|
|
dnl #
|
|
dnl # Default ZFS user configuration
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_CONFIG_USER], [
|
|
ZFS_AC_CONFIG_USER_GETTEXT
|
|
ZFS_AC_CONFIG_USER_LARGEFILE
|
|
ZFS_AC_CONFIG_USER_MOUNT_HELPER
|
|
ZFS_AC_CONFIG_USER_SYSVINIT
|
|
ZFS_AC_CONFIG_USER_DRACUT
|
|
AM_COND_IF([BUILD_FREEBSD], [
|
|
PKG_INSTALLDIR(['${prefix}/libdata/pkgconfig'])], [
|
|
PKG_INSTALLDIR
|
|
])
|
|
ZFS_AC_CONFIG_USER_ZLIB
|
|
AM_COND_IF([BUILD_LINUX], [
|
|
ZFS_AC_CONFIG_USER_UDEV
|
|
ZFS_AC_CONFIG_USER_SYSTEMD
|
|
ZFS_AC_CONFIG_USER_LIBUDEV
|
|
ZFS_AC_CONFIG_USER_LIBUUID
|
|
ZFS_AC_CONFIG_USER_LIBBLKID
|
|
ZFS_AC_CONFIG_USER_STATX
|
|
ZFS_AC_CONFIG_USER_MOUNT_SETATTR
|
|
])
|
|
ZFS_AC_CONFIG_USER_LIBTIRPC
|
|
ZFS_AC_CONFIG_USER_LIBCRYPTO
|
|
ZFS_AC_CONFIG_USER_LIBAIO
|
|
ZFS_AC_CONFIG_USER_LIBATOMIC
|
|
ZFS_AC_CONFIG_USER_LIBFETCH
|
|
ZFS_AC_CONFIG_USER_AIO_H
|
|
ZFS_AC_CONFIG_USER_CLOCK_GETTIME
|
|
ZFS_AC_CONFIG_USER_PAM
|
|
ZFS_AC_CONFIG_USER_BACKTRACE
|
|
ZFS_AC_CONFIG_USER_LIBUNWIND
|
|
ZFS_AC_CONFIG_USER_RUNSTATEDIR
|
|
ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS
|
|
ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV
|
|
ZFS_AC_CONFIG_USER_ZFSEXEC
|
|
|
|
AC_CHECK_FUNCS([execvpe issetugid mlockall strlcat strlcpy gettid])
|
|
|
|
AC_SUBST(RM)
|
|
])
|