git: 47e46b1123b9 - main - zfs: Fix zvol_cdev_open locking

From: Ryan Moeller <freqlabs_at_FreeBSD.org>
Date: Wed, 26 Jan 2022 18:38:29 UTC
The branch main has been updated by freqlabs:

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

commit 47e46b1123b9c732c366848e8184ce42e086a0fb
Author:     Ryan Moeller <freqlabs@FreeBSD.org>
AuthorDate: 2022-01-26 18:33:23 +0000
Commit:     Ryan Moeller <freqlabs@FreeBSD.org>
CommitDate: 2022-01-26 18:37:52 +0000

    zfs: Fix zvol_cdev_open locking
    
    First open locking changes were correctly applied to zvol_geom_open but
    incorrectly applied to zvol_cdev_open, causing spa_namespace_lock to be
    held indefinitely.
    
    Make the first open locking in zvol_cdev_open match zvol_geom_open.
    
    This change has been accepted upstream in openzfs/zfs#13016 but is not
    yet merged.
    
    Reviewed by:    mav
    Fixes:          e92ffd9b6268
    Sponsored by:   iXsystems, Inc.
---
 sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c | 4 ++--
 1 file changed, 2 insertions(+), 2 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 8785557cb61d..06dd8cfdd790 100644
--- a/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c
+++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c
@@ -928,8 +928,8 @@ retry:
 		 */
 		if (!mutex_owned(&spa_namespace_lock)) {
 			if (!mutex_tryenter(&spa_namespace_lock)) {
-				rw_exit(&zvol_state_lock);
-				mutex_enter(&spa_namespace_lock);
+				mutex_exit(&zv->zv_state_lock);
+				rw_exit(&zv->zv_suspend_lock);
 				kern_yield(PRI_USER);
 				goto retry;
 			} else {