mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 19:28:53 +03:00
Avoid taking global lock to destroy zfsdev state
We have exclusive access to our zfsdev state object in this section until it is invalidated by setting zs_minor to -1, so we can destroy the state without taking a lock if we do the invalidation last, after a member to ensure correct ordering. While here, strengthen the assertions that zs_minor is valid when we enter. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Ryan Moeller <freqlabs@FreeBSD.org> Closes #11751
This commit is contained in:
@@ -185,18 +185,14 @@ zfsdev_close(void *data)
|
||||
zfsdev_state_t *zs = data;
|
||||
|
||||
ASSERT(zs != NULL);
|
||||
ASSERT3S(zs->zs_minor, >, 0);
|
||||
|
||||
mutex_enter(&zfsdev_state_lock);
|
||||
|
||||
ASSERT(zs->zs_minor != 0);
|
||||
|
||||
zs->zs_minor = -1;
|
||||
zfs_onexit_destroy(zs->zs_onexit);
|
||||
zfs_zevent_destroy(zs->zs_zevent);
|
||||
zs->zs_onexit = NULL;
|
||||
zs->zs_zevent = NULL;
|
||||
|
||||
mutex_exit(&zfsdev_state_lock);
|
||||
membar_producer();
|
||||
zs->zs_minor = -1;
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
Reference in New Issue
Block a user