git: 420dbe763f15 - main - gmultipath: make physpath distinct from the underlying providers'
Alan Somers
asomers at FreeBSD.org
Thu May 6 18:33:26 UTC 2021
The branch main has been updated by asomers:
URL: https://cgit.FreeBSD.org/src/commit/?id=420dbe763f15b076751443edfeeb4f676deb3c44
commit 420dbe763f15b076751443edfeeb4f676deb3c44
Author: Alan Somers <asomers at FreeBSD.org>
AuthorDate: 2021-04-22 21:09:03 +0000
Commit: Alan Somers <asomers at FreeBSD.org>
CommitDate: 2021-05-06 18:32:27 +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
MFC after: 3 weeks
Differential Revision: https://reviews.freebsd.org/D29941
---
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()
{
More information about the dev-commits-src-main
mailing list