git: bde29083d059 - stable/15 - zvol: Hold the zvol state writer lock when renaming

Mark Johnston <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Message-ID <6a67966d.2554f.1286ac25__20304.6747062885$1785173634$gmane$org@gitrepo.freebsd.org>
The branch stable/15 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=bde29083d0590bd55d0726405a81169109b1265e

commit bde29083d0590bd55d0726405a81169109b1265e
Author:     Mark Johnston <[email protected]>
AuthorDate: 2026-02-09 14:54:44 +0000
Commit:     Mark Johnston <[email protected]>
CommitDate: 2026-07-27 17:29:03 +0000

    zvol: Hold the zvol state writer lock when renaming
    
    Otherwise nothing serializes updates to the global zvol hash table.
    
    Reviewed-by: Brian Behlendorf <[email protected]>
    Reviewed-by: Alexander Motin <[email protected]>
    Signed-off-by: Mark Johnston <[email protected]>
    Closes #18191
    (cherry picked from commit d7b8eef9d281f6831ac7d9cb27362509ec434fb2)
---
 sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c | 2 +-
 sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c   | 2 +-
 sys/contrib/openzfs/module/zfs/zvol.c               | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c b/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c
index 2bc85e9bd972..5be153a90ec5 100644
--- a/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c
+++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c
@@ -1250,7 +1250,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.  */
diff --git a/sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c b/sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c
index 89f9bc555fcf..dc47ff20fd74 100644
--- a/sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c
+++ b/sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c
@@ -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));
diff --git a/sys/contrib/openzfs/module/zfs/zvol.c b/sys/contrib/openzfs/module/zfs/zvol.c
index 185672672a2f..67ba68aca83d 100644
--- a/sys/contrib/openzfs/module/zfs/zvol.c
+++ b/sys/contrib/openzfs/module/zfs/zvol.c
@@ -1780,7 +1780,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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.