Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Jun 2021 18:39:33 GMT
From:      Alan Somers <asomers@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: ee3a7246c65c - stable/13 - gmultipath: make physpath distinct from the underlying providers'
Message-ID:  <202106171839.15HIdXUk003480@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by asomers:

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

commit ee3a7246c65ceb2fdcfcf8d337dbdeaa315a332d
Author:     Alan Somers <asomers@FreeBSD.org>
AuthorDate: 2021-04-22 21:09:03 +0000
Commit:     Alan Somers <asomers@FreeBSD.org>
CommitDate: 2021-06-17 18:39:14 +0000

    gmultipath: make physpath distinct from the underlying providers'
    
    zfsd uses a device's physical path attribute to automatically replace a
    missing ZFS disk when a blank disk is inserted into the same physical
    slot.  Currently gmultipath passes through its underlying providers'
    physical path attribute.  That may cause zfsd to replace a missing
    gmultipath provider with a newly arrived, single-path disk.  That would
    be bad.
    
    This commit fixes that problem by simply appending "/mp" to the
    underlying providers' physical path, in a manner similar to what geli
    already does.
    
    Sponsored by:   Axcient
    Differential Revision: https://reviews.freebsd.org/D29941
    
    (cherry picked from commit 420dbe763f15b076751443edfeeb4f676deb3c44)
---
 sys/geom/multipath/g_multipath.c       | 6 ++++++
 tests/sys/geom/class/multipath/misc.sh | 4 ++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/sys/geom/multipath/g_multipath.c b/sys/geom/multipath/g_multipath.c
index 5972b63e680a..120fced0a8f1 100644
--- a/sys/geom/multipath/g_multipath.c
+++ b/sys/geom/multipath/g_multipath.c
@@ -394,6 +394,12 @@ g_multipath_done(struct bio *bp)
 			mtx_unlock(&sc->sc_mtx);
 		} else
 			mtx_unlock(&sc->sc_mtx);
+		if (bp->bio_error == 0 &&
+			bp->bio_cmd == BIO_GETATTR &&
+			!strcmp(bp->bio_attribute, "GEOM::physpath"))
+		{
+			strlcat(bp->bio_data, "/mp", bp->bio_length);
+		}
 		g_std_done(bp);
 	}
 }
diff --git a/tests/sys/geom/class/multipath/misc.sh b/tests/sys/geom/class/multipath/misc.sh
index 583434e1cfa5..4da8462588ca 100755
--- a/tests/sys/geom/class/multipath/misc.sh
+++ b/tests/sys/geom/class/multipath/misc.sh
@@ -198,7 +198,7 @@ fail_on_error_cleanup()
 atf_test_case physpath cleanup
 physpath_head()
 {
-	atf_set "descr" "gmultipath should pass through the underlying providers' physical path"
+	atf_set "descr" "gmultipath should append /mp to the underlying providers' physical path"
 	atf_set "require.user" "root"
 }
 physpath_body()
@@ -217,7 +217,7 @@ physpath_body()
 	atf_check gnop create -z $physpath /dev/${md1}
 	atf_check -s exit:0 gmultipath create "$name" ${md0}.nop ${md1}.nop
 	gmultipath_physpath=$(diskinfo -p multipath/"$name") 
-	atf_check_equal "$physpath" "$gmultipath_physpath"
+	atf_check_equal "$physpath/mp" "$gmultipath_physpath"
 }
 physpath_cleanup()
 {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106171839.15HIdXUk003480>