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:
Mark Johnston
2026-02-09 14:54:44 +00:00
committed by Brian Behlendorf
parent d736868672
commit d7b8eef9d2
3 changed files with 3 additions and 3 deletions
+1 -1
View File
@@ -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. */
+1 -1
View File
@@ -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
View File
@@ -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);