mirror_zfs/module/zfs
Alan Somers 75b4cbf625
libzfs: On FreeBSD, use MNT_NOWAIT with getfsstat
`getfsstat(2)` is used to retrieve the list of mounted file systems,
which libzfs uses when fetching properties like mountpoint, atime,
setuid, etc.  The `mode` parameter may be `MNT_NOWAIT`, which uses
information in the VFS's cache, or `MNT_WAIT`, which effectively does a
`statfs` on every single mounted file system in order to fetch the most
up-to-date information.  As far as I can tell, the only fields that
libzfs cares about are the filesystem's name, mountpoint, fstypename,
and mount flags.  Those things are always updated on mount and unmount,
so they will always be accurate in the VFS's mount cache except in two
circumstances:

1) When a file system is busy unmounting
2) When a ZFS file system changes the value of a mount-overridable
   property like atime or setuid, but doesn't remount the file system.
   Right now that only happens when the property is changed by an
   unprivileged user who has delegated authority to change the property
   but not to mount the dataset.  But perhaps libzfs could choose to do
   it for other reasons in the future.

Switching to `MNT_NOWAIT` will greatly improve speed with no downside,
as long as we explicitly update the mount cache whenever we change a
mount-overridable property.

For comparison, Illumos gets this information using the native
`getmntany` and `getmntent` functions, which also use cached
information.  The illumos function that would refresh the cache,
`resetmnttab`, is never called by libzfs.

And on GNU/Linux, `getmntany` and `getmntent` don't even communicate
with the kernel directly.  They simply parse the file they are given,
which is usually /etc/mtab or /proc/mounts.  Perhaps the implementation
of /proc/mounts is synchronous, ala MNT_WAIT; I don't know.

Sponsored-by:	Axcient
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by:	Alan Somers <asomers@gmail.com>
Closes: #12091
2021-06-08 07:36:43 -06:00
..
abd.c Fix various typos 2021-04-02 18:52:15 -07:00
aggsum.c More aggsum optimizations 2021-06-07 09:02:47 -07:00
arc.c module/zfs: arc: arc_hdr_realloc_crypt: remove unused variables 2021-06-07 20:58:42 -07:00
blkptr.c Add zstd support to zfs 2020-08-20 10:30:06 -07:00
bplist.c Fast Clone Deletion 2019-07-26 10:54:14 -07:00
bpobj.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
bptree.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
bqueue.c Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
btree.c Fix typo in btree.c 2020-08-17 15:25:37 -07:00
dataset_kstats.c Introduce write-mostly sums 2021-05-27 14:27:29 -06:00
dbuf_stats.c Eliminate gratuitous bzeroing in dbuf_stats_hash_table_data 2020-09-30 13:24:38 -07:00
dbuf.c module/zfs: dbuf: dbuf_read_impl: remove unused variable 2021-06-07 20:58:47 -07:00
ddt_zap.c Refactor dnode dirty context from dbuf_dirty 2020-02-26 16:09:17 -08:00
ddt.c Remove dead code 2020-06-18 12:21:18 -07:00
dmu_diff.c Mark write_record static 2019-12-03 09:51:44 -08:00
dmu_object.c Introduce CPU_SEQID_UNSTABLE 2020-11-02 11:51:12 -08:00
dmu_objset.c Relax special_small_blocks assertion. 2021-01-23 15:45:27 -08:00
dmu_recv.c Fix dmu_recv_stream test for resumable 2021-05-13 21:46:14 -07:00
dmu_redact.c Fix dnode refcount tracking 2020-11-10 10:37:10 -08:00
dmu_send.c implicit conversion from 'boolean_t' to 'ds_hold_flags_t' 2020-12-27 16:31:02 -08:00
dmu_traverse.c ZFS traverse_visitbp optimization to limit prefetch 2021-04-15 13:49:27 -07:00
dmu_tx.c Document monotonicity of dmu_tx_assign() and txg_hold_open() 2021-02-02 10:11:37 -08:00
dmu_zfetch.c Split dmu_zfetch() speculation and execution parts 2021-03-19 22:56:11 -07:00
dmu.c Split dmu_zfetch() speculation and execution parts 2021-03-19 22:56:11 -07:00
dnode_sync.c Improve zfs receive performance with lightweight write 2020-12-11 10:26:02 -08:00
dnode.c Simplify/fix dnode_move() for dn_zfetch 2021-05-07 15:07:03 -07:00
dsl_bookmark.c Fix various typos 2021-04-02 18:52:15 -07:00
dsl_crypt.c Revert "Fix raw sends on encrypted datasets when copying back snapshots" 2021-05-13 10:00:17 -07:00
dsl_dataset.c Revert special case code from pre-hashtable nvlist era 2021-01-27 21:31:51 -08:00
dsl_deadlist.c Livelist logic should handle dedup blkptrs 2021-06-07 13:09:07 -06:00
dsl_deleg.c Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
dsl_destroy.c Revert special case code from pre-hashtable nvlist era 2021-01-27 21:31:51 -08:00
dsl_dir.c Add 'zfs rename -u' to rename without remounting 2020-09-01 16:14:16 -07:00
dsl_pool.c dsl_pool: extend comment on DSL Pool Configuration Lock 2020-12-19 18:04:05 -08:00
dsl_prop.c Replace sprintf()->snprintf() and strcpy()->strlcpy() 2020-06-07 11:42:12 -07:00
dsl_scan.c Improve scrub maxinflight_bytes math. 2021-05-27 10:11:39 -06:00
dsl_synctask.c nowait synctask must succeed 2020-09-04 10:29:39 -07:00
dsl_userhold.c Replace sprintf()->snprintf() and strcpy()->strlcpy() 2020-06-07 11:42:12 -07:00
edonr_zfs.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
fm.c module/zfs: remove zfs_zevent_console and zfs_zevent_cols 2021-05-10 11:00:15 -07:00
gzip.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
hkdf.c Encryption patch follow-up 2017-10-11 16:54:48 -04:00
lz4.c Prefix zfs internal endian checks with _ZFS 2020-07-28 13:02:49 -07:00
lzjb.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
Makefile.in Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
metaslab.c Use a helper function to clarify gang block size 2021-03-26 11:19:35 -07:00
mmp.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
multilist.c Implement memory and CPU hotplug 2020-12-10 14:09:23 -08:00
objlist.c Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
pathname.c Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
range_tree.c Fix incorrect deletion order in range_tree_add_impl gap case 2020-10-14 08:59:54 -07:00
refcount.c Reference_tracking_enable should be a module param 2021-03-16 14:56:17 -07:00
rrwlock.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
sa.c Extending FreeBSD UIO Struct 2021-01-20 21:27:30 -08:00
sha256.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
skein_zfs.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
spa_boot.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
spa_checkpoint.c Refactor dnode dirty context from dbuf_dirty 2020-02-26 16:09:17 -08:00
spa_config.c Cleaning up uio headers 2021-02-20 20:16:50 -08:00
spa_errlog.c Fix typos in module/zfs/ 2019-09-02 17:56:41 -07:00
spa_history.c record ioctl elapsed time in zpool history 2021-01-11 09:29:25 -08:00
spa_log_spacemap.c Balance parentheses in parameter descriptions 2021-04-11 16:35:07 -07:00
spa_misc.c FreeBSD: Fix scope of deadman tunables 2021-03-11 19:23:24 -08:00
spa_stats.c FreeBSD: Add support for procfs_list 2020-09-23 16:43:51 -07:00
spa.c Scale worker threads and taskqs with number of CPUs 2021-05-14 09:13:53 -07:00
space_map.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
space_reftree.c Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
THIRDPARTYLICENSE.cityhash OpenZFS 8484 - Implement aggregate sum and use for arc counters 2018-06-06 09:35:59 -07:00
THIRDPARTYLICENSE.cityhash.descrip OpenZFS 8484 - Implement aggregate sum and use for arc counters 2018-06-06 09:35:59 -07:00
txg.c Document monotonicity of dmu_tx_assign() and txg_hold_open() 2021-02-02 10:11:37 -08:00
uberblock.c MMP interval and fail_intervals in uberblock 2019-03-21 12:47:57 -07:00
unique.c Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
vdev_cache.c Replace ASSERTV macro with compiler annotation 2019-12-05 12:37:00 -08:00
vdev_draid_rand.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_draid.c Fix dRAID sequential resilver silent damage handling 2021-05-20 15:05:26 -07:00
vdev_indirect_births.c Fixes: #8934 Large kmem_alloc 2019-07-10 15:54:49 -07:00
vdev_indirect_mapping.c Replace ASSERTV macro with compiler annotation 2019-12-05 12:37:00 -08:00
vdev_indirect.c module/zfs: vdev_indirect: vdev_indirect_repair: remove unused variable 2021-06-07 20:58:51 -07:00
vdev_initialize.c Cancel TRIM / initialize on FAULTED non-writeable vdevs 2021-03-02 10:27:27 -08:00
vdev_label.c Parallelize vdev_validate 2021-01-26 19:36:51 -08:00
vdev_mirror.c vdev_mirror: don't scrub/resilver devices that can't be read 2021-04-27 17:48:11 -07:00
vdev_missing.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_queue.c allow callers to allocate and provide the abd_t struct 2021-01-20 11:24:37 -08:00
vdev_raidz_math_aarch64_neon_common.h FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_aarch64_neon.c Linux 5.0 compat: SIMD compatibility 2019-07-12 09:31:20 -07:00
vdev_raidz_math_aarch64_neonx2.c Linux 5.0 compat: SIMD compatibility 2019-07-12 09:31:20 -07:00
vdev_raidz_math_avx2.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_avx512bw.c Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
vdev_raidz_math_avx512f.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_impl.h Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_raidz_math_powerpc_altivec_common.h FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_powerpc_altivec.c Prefix zfs internal endian checks with _ZFS 2020-07-28 13:02:49 -07:00
vdev_raidz_math_scalar.c Linux 5.3: Fix switch() fall though compiler errors 2019-08-21 09:29:23 -07:00
vdev_raidz_math_sse2.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_ssse3.c Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
vdev_raidz_math.c Reduce fletcher4 and raidz benchmark times 2020-12-06 09:57:20 -08:00
vdev_raidz.c Fix dRAID sequential resilver silent damage handling 2021-05-20 15:05:26 -07:00
vdev_rebuild.c Use dsl_scan_setup_check() to setup a scrub 2021-04-08 14:33:15 -07:00
vdev_removal.c module/zfs: vdev_removal: spa_vdev_remove_thread: remove unused variable 2021-06-07 20:58:56 -07:00
vdev_root.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_trim.c Cancel TRIM / initialize on FAULTED non-writeable vdevs 2021-03-02 10:27:27 -08:00
vdev.c Propagate vdev state due to invalid label corruption 2021-05-25 12:32:07 -06:00
zap_leaf.c Refactor dnode dirty context from dbuf_dirty 2020-02-26 16:09:17 -08:00
zap_micro.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
zap.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
zcp_get.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
zcp_global.c OpenZFS 8600 - ZFS channel programs - snapshot 2018-02-08 15:29:24 -08:00
zcp_iter.c Fix typos in module/zfs/ 2019-09-02 17:56:41 -07:00
zcp_set.c Support setting user properties in a channel program 2020-02-14 13:41:42 -08:00
zcp_synctask.c filesystem_limit/snapshot_limit is incorrectly enforced against root 2020-07-11 17:18:02 -07:00
zcp.c Channel program may spuriously fail with "memory limit exhausted" 2020-11-11 17:16:15 -08:00
zfeature.c Throw const on some strings 2020-10-02 17:44:10 -07:00
zfs_byteswap.c Mark functions as static 2020-06-18 12:20:38 -07:00
zfs_fm.c Ratelimit deadman zevents as with delay zevents 2021-04-07 16:23:57 -07:00
zfs_fuid.c Fix regression in POSIX mode behavior 2021-03-19 22:50:46 -07:00
zfs_ioctl.c libzfs: On FreeBSD, use MNT_NOWAIT with getfsstat 2021-06-08 07:36:43 -06:00
zfs_log.c Fix zfs_get_data access to files with wrong generation 2021-03-19 22:53:31 -07:00
zfs_onexit.c Remove deduplicated send/receive code 2020-04-23 10:06:57 -07:00
zfs_quota.c File incorrectly zeroed when receiving incremental stream that toggles -L 2020-06-09 10:41:01 -07:00
zfs_ratelimit.c Change checksum & IO delay ratelimit values 2018-03-04 17:34:51 -08:00
zfs_replay.c Simplify FreeBSD's locking requirements in zfs_replay.c 2020-01-22 17:55:56 -08:00
zfs_rlock.c Add a "try" operation for range locks 2020-07-06 11:53:31 -07:00
zfs_sa.c Extending FreeBSD UIO Struct 2021-01-20 21:27:30 -08:00
zfs_vnops.c Fix zfs_get_data access to files with wrong generation 2021-03-19 22:53:31 -07:00
zil.c Fix zfs_get_data access to files with wrong generation 2021-03-19 22:53:31 -07:00
zio_checksum.c Mark functions as static 2020-06-18 12:20:38 -07:00
zio_compress.c Avoid symbol collision with in-kernel zstdlib 2020-08-24 12:20:41 -07:00
zio_inject.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
zio.c Combine zio caches if possible 2021-04-17 12:36:04 -07:00
zle.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
zrlock.c Remove dead code 2020-06-18 12:21:18 -07:00
zthr.c Retain thread name when resuming a zthr 2020-09-03 20:09:52 -07:00
zvol.c module/zfs/zvol.c: purge unused zvol_volmode_cb_arg 2021-04-15 14:55:37 -07:00