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
This commit is contained in:
parent
be578b67b5
commit
420dbe763f
@ -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