zvol: Hold the zvol state writer lock when renaming
Otherwise nothing serializes updates to the global zvol hash table. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com> Signed-off-by: Mark Johnston <markj@FreeBSD.org> Closes #18191
This commit is contained in:
committed by
Brian Behlendorf
parent
d736868672
commit
d7b8eef9d2
@@ -1249,7 +1249,7 @@ zvol_os_rename_minor(zvol_state_t *zv, const char *newname)
|
||||
{
|
||||
int error = 0;
|
||||
|
||||
ASSERT(RW_LOCK_HELD(&zvol_state_lock));
|
||||
ASSERT(RW_WRITE_HELD(&zvol_state_lock));
|
||||
ASSERT(MUTEX_HELD(&zv->zv_state_lock));
|
||||
|
||||
/* Move to a new hashtable entry. */
|
||||
|
||||
@@ -1796,7 +1796,7 @@ zvol_os_rename_minor(zvol_state_t *zv, const char *newname)
|
||||
{
|
||||
int readonly = get_disk_ro(zv->zv_zso->zvo_disk);
|
||||
|
||||
ASSERT(RW_LOCK_HELD(&zvol_state_lock));
|
||||
ASSERT(RW_WRITE_HELD(&zvol_state_lock));
|
||||
ASSERT(MUTEX_HELD(&zv->zv_state_lock));
|
||||
|
||||
strlcpy(zv->zv_name, newname, sizeof (zv->zv_name));
|
||||
|
||||
+1
-1
@@ -1827,7 +1827,7 @@ zvol_rename_minors_impl(zvol_task_t *task)
|
||||
|
||||
oldnamelen = strlen(oldname);
|
||||
|
||||
rw_enter(&zvol_state_lock, RW_READER);
|
||||
rw_enter(&zvol_state_lock, RW_WRITER);
|
||||
|
||||
for (zv = list_head(&zvol_state_list); zv != NULL; zv = zv_next) {
|
||||
zv_next = list_next(&zvol_state_list, zv);
|
||||
|
||||
Reference in New Issue
Block a user