mirror_zfs/module/zfs
Brian Behlendorf 2915930f89 Linux 5.13 compat: retry zvol_open() when contended
Due to a possible lock inversion the zvol open call path on Linux
needs to be able to retry in the case where the spa_namespace_lock
cannot be acquired.

For Linux 5.12 an older kernel this was accomplished by returning
-ERESTARTSYS from zvol_open() to request that blkdev_get() drop
the bdev->bd_mutex lock, reaquire it, then call the open callback
again.  However, as of the 5.13 kernel this behavior was removed.

Therefore, for 5.12 and older kernels we preserved the existing
retry logic, but for 5.13 and newer kernels we retry internally in
zvol_open().  This should always succeed except in the case where
a pool's vdev are layed on zvols, in which case it may fail.  To
handle this case vdev_disk_open() has been updated to retry when
opening a device when -ERESTARTSYS is returned.

Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #12301
Closes #12759
2021-12-06 13:40:59 -08:00
..
abd.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
aggsum.c Reduce number of atomic_add() calls in aggsum 2020-02-06 13:21:06 -08:00
arc.c Avoid deadlock when removing L2ARC devices under I/O 2021-06-23 13:22:15 -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 Fix panic on DilOS with kstat per dataset statistics 2019-09-03 12:12:31 -07:00
dbuf_stats.c Eliminate gratuitous bzeroing in dbuf_stats_hash_table_data 2020-10-01 12:22:54 -07:00
dbuf.c Remove UIO_ZEROCOPY functions structures 2021-11-12 16:31:55 -08:00
ddt_zap.c Refactor dnode dirty context from dbuf_dirty 2020-02-26 16:09:17 -08:00
ddt.c Tinker with slop space accounting with dedup 2021-09-22 15:19:08 -07:00
dmu_diff.c Mark write_record static 2019-12-03 09:51:44 -08:00
dmu_object.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
dmu_objset.c Relax special_small_blocks assertion. 2021-01-24 16:06:16 -08:00
dmu_recv.c Fix dmu_recv_stream test for resumable 2021-06-23 13:22:15 -07:00
dmu_redact.c Fix dnode refcount tracking 2020-11-11 11:03:24 -08:00
dmu_send.c implicit conversion from 'boolean_t' to 'ds_hold_flags_t' 2021-01-05 10:30:19 -08:00
dmu_traverse.c zil_parse: make callback parameters const 2020-10-16 13:01:53 -07:00
dmu_tx.c Refactor dnode dirty context from dbuf_dirty 2020-02-26 16:09:17 -08:00
dmu_zfetch.c Expose zfetch_max_idistance tunable 2020-10-16 13:02:39 -07:00
dmu.c Fix lseek(SEEK_DATA/SEEK_HOLE) mmap consistency 2021-11-12 16:31:55 -08:00
dnode_sync.c dnode_sync is careless with range tree 2020-08-27 16:07:05 -07:00
dnode.c Restore dirty dnode detection logic 2021-11-12 16:31:55 -08:00
dsl_bookmark.c Fix kernel panic induced by redacted send 2020-12-23 14:34:59 -08:00
dsl_crypt.c Prune dead branch reported by Coverity 2020-10-01 12:20:16 -07:00
dsl_dataset.c Add zstd support to zfs 2020-08-20 10:30:06 -07:00
dsl_deadlist.c Livelist logic should handle dedup blkptrs 2021-09-22 15:19:08 -07:00
dsl_deleg.c Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
dsl_destroy.c Fix i/o error handling of livelists and zap iteration 2020-08-05 10:22:09 -07:00
dsl_dir.c Add 'zfs rename -u' to rename without remounting 2020-09-03 16:16:15 -07:00
dsl_pool.c Mark functions as static 2020-06-18 12:20:38 -07:00
dsl_prop.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
dsl_scan.c Update references to nonexistent man pages in code 2020-10-30 16:04:41 -07:00
dsl_synctask.c nowait synctask must succeed 2020-09-09 10:25:59 -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 file reference counts can get corrupted 2021-09-22 15:19:08 -07:00
gzip.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
hkdf.c
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 Share zfs_fsync, zfs_read, zfs_write, et al between Linux and FreeBSD 2020-12-23 14:34:59 -08:00
metaslab.c Update references to nonexistent man pages in code 2020-10-30 16:04:41 -07:00
mmp.c Initialize mmp_last_write when the mmp thread starts 2020-09-09 10:26:04 -07:00
multilist.c Make use of ZFS_DEBUG consistent within kmod sources 2020-07-25 20:07:44 -07: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-16 13:01:24 -07:00
range_tree.c Fix incorrect deletion order in range_tree_add_impl gap case 2020-10-16 13:05:23 -07:00
refcount.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -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-11-12 16:31:55 -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-11-12 16:31:55 -08:00
spa_errlog.c Fix typos in module/zfs/ 2019-09-02 17:56:41 -07:00
spa_history.c Update references to nonexistent man pages in code 2020-10-30 16:04:41 -07:00
spa_log_spacemap.c Make module tunables cross platform 2019-09-05 14:49:49 -07:00
spa_misc.c Fix unfortunate NULL in spa_update_dspace 2021-09-22 15:19:08 -07:00
spa_stats.c FreeBSD: Add support for procfs_list 2020-10-01 12:18:56 -07:00
spa.c Use fallthrough macro 2021-11-12 15:24:36 -08: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 Replace cv_{timed}wait_sig with cv_{timed}wait_idle where appropriate 2020-09-09 10:21:01 -07: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_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 ZTS: fix removal_condense_export test case 2021-06-23 13:22:14 -07:00
vdev_initialize.c Cancel TRIM / initialize on FAULTED non-writeable vdevs 2021-06-23 13:22:14 -07:00
vdev_label.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
vdev_mirror.c vdev_ashift should only be set once 2020-09-18 12:40:20 -07:00
vdev_missing.c Import vdev ashift optimization from FreeBSD 2020-08-21 12:53:17 -07:00
vdev_queue.c Fix for "Reduce latency effects of non-interactive I/O" 2020-12-23 13:09:17 -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 Fix const-correctness in raidz math 2020-02-03 10:52:41 -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 Use fallthrough macro 2021-11-12 15:24:36 -08: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-23 14:34:59 -08:00
vdev_raidz.c Avoid posting duplicate zpool events 2020-09-09 10:26:00 -07:00
vdev_rebuild.c nowait synctask must succeed 2020-09-09 10:25:59 -07:00
vdev_removal.c special device removal space accounting fixes 2020-12-23 14:34:59 -08:00
vdev_root.c Import vdev ashift optimization from FreeBSD 2020-08-21 12:53:17 -07:00
vdev_trim.c Cancel TRIM / initialize on FAULTED non-writeable vdevs 2021-06-23 13:22:14 -07:00
vdev.c Rescan enclosure sysfs path on import 2021-11-12 16:31:55 -08: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
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-12 09:02:00 -08:00
zfeature.c Throw const on some strings 2020-10-16 12:55:56 -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-06-23 13:22:14 -07:00
zfs_fuid.c Fix regression in POSIX mode behavior 2021-06-23 13:22:14 -07:00
zfs_ioctl.c Cleaning up uio headers 2021-11-12 16:31:55 -08:00
zfs_log.c Initialize all fields in zfs_log_xvattr() 2021-09-22 15:19:08 -07:00
zfs_onexit.c file reference counts can get corrupted 2021-09-22 15:19:08 -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 Use fallthrough macro 2021-11-12 15:24:36 -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-11-12 16:31:55 -08:00
zfs_vnops.c Fix lseek(SEEK_DATA/SEEK_HOLE) mmap consistency 2021-11-12 16:31:55 -08:00
zil.c Zero pad bytes following TX_WRITE log data 2021-09-22 15:19:08 -07:00
zio_checksum.c Mark functions as static 2020-06-18 12:20:38 -07:00
zio_compress.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
zio_inject.c Replace ASSERTV macro with compiler annotation 2019-12-05 12:37:00 -08:00
zio.c Avoid deadlock when removing L2ARC devices under I/O 2021-06-23 13:22:15 -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-09 10:21:16 -07:00
zvol.c Linux 5.13 compat: retry zvol_open() when contended 2021-12-06 13:40:59 -08:00