1
0
mirror of https://git.proxmox.com/git/mirror_zfs.git synced 2025-02-24 15:58:47 +03:00
mirror_zfs/module
Rob Norris cf80a803d5 zvol: ensure device minors are properly cleaned up
Currently, if a minor is in use when we try to remove it, we'll skip it
and never come back to it again. Since the zvol state is hung off the
minor in the kernel, this can get us into weird situations if something
tries to use it after the removal fails. It's even worse at pool export,
as there's now a vestigial zvol state with no pool under it. It's
weirder again if the pool is subsequently reimported, as the zvol code
(reasonably) assumes the zvol state has been properly setup, when it's
actually left over from the previous import of the pool.

This commit attempts to tackle that by setting a flag on the zvol if its
minor can't be removed, and then checking that flag when a request is
made and rejecting it, thus stopping new work coming in.

The flag also causes a condvar to be signaled when the last client
finishes. For the case where a single minor is being removed (eg
changing volmode), it will wait for this signal before proceeding.
Meanwhile, when removing all minors, a background task is created for
each minor that couldn't be removed on the spot, and those tasks then
wake and clean up.

Since any new tasks are queued on to the pool's spa_zvol_taskq,
spa_export_common() will continue to wait at export until all minors are
removed.

Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Closes 
Closes 
2024-11-15 10:14:50 -08:00
..
avl Suppress Clang Static Analyzer false positive in the AVL tree code. 2023-03-08 13:51:21 -08:00
icp module/icp/asm-arm/sha2: enable non-SIMD asm kernels on armv5/6 2024-08-26 15:10:16 -07:00
lua lua: add flex array field to TString type 2024-11-05 15:43:52 -08:00
nvpair xdr: header cleanup 2024-04-29 13:50:05 -07:00
os zvol: ensure device minors are properly cleaned up 2024-11-15 10:14:50 -08:00
unicode Illumos : do_composition() needs sign awareness 2023-01-05 11:16:21 -08:00
zcommon Avoid computing strlen() inside loops 2024-11-05 15:43:52 -08:00
zfs zvol: ensure device minors are properly cleaned up 2024-11-15 10:14:50 -08:00
zstd Resolve WS-2021-0184 vulnerability in zstd 2023-02-02 15:12:51 -08:00
.gitignore
Kbuild.in Add SIMD metadata in /proc on Linux 2024-11-05 15:43:52 -08:00
Makefile.bsd Finally drop long disabled vdev cache. 2023-06-09 12:40:55 -07:00
Makefile.in check-zstd-symbols: also ignore __pfx_ symbols 2023-09-19 08:52:06 -07:00