mirror of
https://git.FreeBSD.org/src.git
synced 2024-10-19 02:29:40 +00:00
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 420dbe763f
)
This commit is contained in:
parent
ea01d2bc1c
commit
ee3a7246c6
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user