Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Jul 2026 17:50:03 +0000
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: f6e3242535bd - releng/15.0 - zvol: Hold the zvol state writer lock when renaming
Message-ID:  <6a6a3d4b.3bf0b.3daa1e3a@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch releng/15.0 has been updated by markj:

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

commit f6e3242535bd000596c2c51725be06c728bdf567
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2026-02-09 14:54:44 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2026-07-28 15:19:38 +0000

    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
    
    Approved by:    so
    Security:       FreeBSD-EN-26:19.zfs
    
    (cherry picked from commit d7b8eef9d281f6831ac7d9cb27362509ec434fb2)
    (cherry picked from commit bde29083d0590bd55d0726405a81169109b1265e)
---
 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 68f905124c49..c10563d19837 100644
--- a/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c
+++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c
@@ -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.  */
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 b6d6f9db2597..b35817f5c830 100644
--- a/sys/contrib/openzfs/module/zfs/zvol.c
+++ b/sys/contrib/openzfs/module/zfs/zvol.c
@@ -1764,7 +1764,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);


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a6a3d4b.3bf0b.3daa1e3a>