mirror_zfs/module/zfs
Brian Behlendorf 77e2756de0
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-01 17:07:12 -07:00
..
abd.c Use fallthrough macro 2021-09-14 10:17:54 -06:00
aggsum.c More aggsum optimizations 2021-06-07 09:02:47 -07:00
arc.c Introduce a tunable to exclude special class buffers from L2ARC 2021-11-11 12:52:16 -08:00
blkptr.c
bplist.c
bpobj.c
bptree.c
bqueue.c
btree.c
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 Code cleanups 2021-11-30 10:32:38 -08:00
ddt_zap.c
ddt.c Remove NOTE(CONSTCOND) and note.h 2021-07-26 12:07:53 -07:00
dmu_diff.c
dmu_object.c Introduce CPU_SEQID_UNSTABLE 2020-11-02 11:51:12 -08:00
dmu_objset.c Introduce a tunable to exclude special class buffers from L2ARC 2021-11-11 12:52:16 -08:00
dmu_recv.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
dmu_redact.c dmu_redact.c does not call bqueue_destroy 2021-07-20 08:08:45 -06:00
dmu_send.c Allow sending corrupt snapshots even if metadata is corrupted 2021-09-09 08:17:31 -06:00
dmu_traverse.c ZFS traverse_visitbp optimization to limit prefetch 2021-04-15 13:49:27 -07:00
dmu_tx.c Add Module Parameter Regarding Log Size Limit 2021-07-20 09:40:24 -06:00
dmu_zfetch.c Correct refcount_add in dmu_zfetch 2021-10-08 11:10:34 -07:00
dmu.c Default to zfs_dmu_offset_next_sync=1 2021-11-30 10:38:09 -08:00
dnode_sync.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
dnode.c Restore dirty dnode detection logic 2021-11-10 16:14:32 -08: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 Introduce dsl_dir_diduse_transfer_space() 2021-07-16 13:39:24 -06:00
dsl_deadlist.c Livelist logic should handle dedup blkptrs 2021-06-07 13:09:07 -06:00
dsl_deleg.c
dsl_destroy.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
dsl_dir.c Introduce dsl_dir_diduse_transfer_space() 2021-07-16 13:39:24 -06:00
dsl_pool.c Add Module Parameter Regarding Log Size Limit 2021-07-20 09:40:24 -06:00
dsl_prop.c Use fallthrough macro 2021-09-14 10:17:54 -06:00
dsl_scan.c Make dsl_scan print the pool name in dbgmsg 2021-10-26 17:24:14 -06:00
dsl_synctask.c
dsl_userhold.c
edonr_zfs.c
fm.c file reference counts can get corrupted 2021-07-10 19:00:37 -06:00
gzip.c
hkdf.c
lz4.c
lzjb.c
Makefile.in Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
metaslab.c Skip spacemaps reading in case of pool readonly import 2021-11-09 12:50:39 -08:00
mmp.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
multilist.c Optimize small random numbers generation 2021-06-22 17:35:23 -06:00
objlist.c
pathname.c Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
range_tree.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
refcount.c Export minimal zfs_refcount interfaces 2021-10-11 10:54:39 -07:00
rrwlock.c
sa.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
sha256.c
skein_zfs.c
spa_boot.c
spa_checkpoint.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
spa_config.c Cleaning up uio headers 2021-02-20 20:16:50 -08:00
spa_errlog.c
spa_history.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
spa_log_spacemap.c Replace /*PRINTFLIKEn*/ with attribute(printf) 2021-07-26 12:07:15 -07:00
spa_misc.c Vdev Properties Feature 2021-11-30 07:46:25 -07:00
spa_stats.c Remove pool io kstats (#12212) 2021-06-10 08:27:33 -07:00
spa.c Vdev Properties Feature 2021-11-30 07:46:25 -07:00
space_map.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
space_reftree.c
THIRDPARTYLICENSE.cityhash
THIRDPARTYLICENSE.cityhash.descrip
txg.c Optimize txg_kick() process (#12274) 2021-07-01 09:20:27 -06:00
uberblock.c
unique.c
vdev_cache.c Code cleanups 2021-11-30 10:32:38 -08:00
vdev_draid_rand.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_draid.c vdev_draid_min_asize() ignores reserved space 2021-06-13 10:48:53 -07:00
vdev_indirect_births.c
vdev_indirect_mapping.c
vdev_indirect.c Run arc_evict thread at higher priority 2021-08-10 11:36:26 -06:00
vdev_initialize.c Cancel TRIM / initialize on FAULTED non-writeable vdevs 2021-03-02 10:27:27 -08:00
vdev_label.c Vdev Properties Feature 2021-11-30 07:46:25 -07:00
vdev_mirror.c Optimize small random numbers generation 2021-06-22 17:35:23 -06:00
vdev_missing.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_queue.c Code cleanups 2021-11-30 10:32:38 -08:00
vdev_raidz_math_aarch64_neon_common.h
vdev_raidz_math_aarch64_neon.c
vdev_raidz_math_aarch64_neonx2.c
vdev_raidz_math_avx2.c
vdev_raidz_math_avx512bw.c
vdev_raidz_math_avx512f.c
vdev_raidz_math_impl.h Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_raidz_math_powerpc_altivec_common.h
vdev_raidz_math_powerpc_altivec.c
vdev_raidz_math_scalar.c Use fallthrough macro 2021-09-14 10:17:54 -06:00
vdev_raidz_math_sse2.c
vdev_raidz_math_ssse3.c
vdev_raidz_math.c Initialize parity blocks before RAID-Z reconstruction benchmarking 2021-08-23 11:10:17 -07:00
vdev_raidz.c Single IO issue for raidz writes with skip sector 2021-11-09 12:51:33 -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 Vdev Properties Feature 2021-11-30 07:46:25 -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 Vdev Properties Feature 2021-11-30 07:46:25 -07:00
zap_leaf.c
zap_micro.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
zap.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
zcp_get.c
zcp_global.c
zcp_iter.c
zcp_set.c
zcp_synctask.c A few fixes of callback typecasting (for the upcoming ClangCFI) 2021-07-20 08:03:33 -06:00
zcp.c Annotated dprintf as printf-like 2021-06-22 21:53:45 -07:00
zfeature.c Throw const on some strings 2020-10-02 17:44:10 -07:00
zfs_byteswap.c
zfs_fm.c Upstream: Add snapshot and zvol events 2021-09-09 10:44:21 -07:00
zfs_fuid.c Fix regression in POSIX mode behavior 2021-03-19 22:50:46 -07:00
zfs_ioctl.c Vdev Properties Feature 2021-11-30 07:46:25 -07:00
zfs_log.c Prune /*NOTREACHED*/ 2021-07-26 12:07:26 -07:00
zfs_onexit.c file reference counts can get corrupted 2021-07-10 19:00:37 -06:00
zfs_quota.c
zfs_ratelimit.c
zfs_replay.c Use fallthrough macro 2021-09-14 10:17:54 -06:00
zfs_rlock.c
zfs_sa.c Extending FreeBSD UIO Struct 2021-01-20 21:27:30 -08:00
zfs_vnops.c Fix lseek(SEEK_DATA/SEEK_HOLE) mmap consistency 2021-11-07 14:27:44 -07:00
zil.c Fixed data integrity issue when underlying disk returns error 2021-09-13 13:02:39 -07:00
zio_checksum.c Enable edonr in FreeBSD 2021-11-16 12:40:10 -07:00
zio_compress.c Use fallthrough macro 2021-09-14 10:17:54 -06:00
zio_inject.c Optimize small random numbers generation 2021-06-22 17:35:23 -06:00
zio.c Vdev Properties Feature 2021-11-30 07:46:25 -07:00
zle.c
zrlock.c
zthr.c Run arc_evict thread at higher priority 2021-08-10 11:36:26 -06:00
zvol.c Linux 5.13 compat: retry zvol_open() when contended 2021-12-01 17:07:12 -07:00