ZTS: Refactor is_shared, fix impl on FreeBSD
FreeBSD doesn't have a `share` command. It does have showmount. Split the separate platform impls out of is_shared_impl. Dispatch to the correct platform impl function from is_shared. Eliminate the use of is_shared_impl from tests. is_shared works. Reviewed-by: John Kennedy <john.kennedy@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ryan Moeller <ryan@iXsystems.com> Closes #10037
This commit is contained in:
parent
f5f438194d
commit
b7dbbf6aa7
|
@ -127,6 +127,7 @@ export SYSTEM_FILES_FREEBSD='chflags
|
||||||
rmextattr
|
rmextattr
|
||||||
setextattr
|
setextattr
|
||||||
sha256
|
sha256
|
||||||
|
showmount
|
||||||
swapctl
|
swapctl
|
||||||
sysctl
|
sysctl
|
||||||
uncompress'
|
uncompress'
|
||||||
|
|
|
@ -1324,20 +1324,18 @@ function datasetnonexists
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_shared_impl
|
function is_shared_freebsd
|
||||||
|
{
|
||||||
|
typeset fs=$1
|
||||||
|
|
||||||
|
showmount -E | grep -qx $fs
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_shared_illumos
|
||||||
{
|
{
|
||||||
typeset fs=$1
|
typeset fs=$1
|
||||||
typeset mtpt
|
typeset mtpt
|
||||||
|
|
||||||
if is_linux; then
|
|
||||||
for mtpt in `share | awk '{print $1}'` ; do
|
|
||||||
if [[ $mtpt == $fs ]] ; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
for mtpt in `share | awk '{print $2}'` ; do
|
for mtpt in `share | awk '{print $2}'` ; do
|
||||||
if [[ $mtpt == $fs ]] ; then
|
if [[ $mtpt == $fs ]] ; then
|
||||||
return 0
|
return 0
|
||||||
|
@ -1352,6 +1350,19 @@ function is_shared_impl
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function is_shared_linux
|
||||||
|
{
|
||||||
|
typeset fs=$1
|
||||||
|
typeset mtpt
|
||||||
|
|
||||||
|
for mtpt in `share | awk '{print $1}'` ; do
|
||||||
|
if [[ $mtpt == $fs ]] ; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Given a mountpoint, or a dataset name, determine if it is shared via NFS.
|
# Given a mountpoint, or a dataset name, determine if it is shared via NFS.
|
||||||
#
|
#
|
||||||
|
@ -1376,7 +1387,11 @@ function is_shared
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
is_shared_impl "$fs"
|
case $(uname) in
|
||||||
|
FreeBSD) is_shared_freebsd "$fs" ;;
|
||||||
|
Linux) is_shared_linux "$fs" ;;
|
||||||
|
*) is_shared_illumos "$fs" ;;
|
||||||
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -57,16 +57,12 @@ log_must zfs create \
|
||||||
#
|
#
|
||||||
# 2. Verify the datasets is shared.
|
# 2. Verify the datasets is shared.
|
||||||
#
|
#
|
||||||
# The "non-impl" variant of "is_shared" requires the dataset to exist.
|
log_must is_shared $TESTDIR/1
|
||||||
# Thus, we can only use the "impl" variant in step 4, below. To be
|
|
||||||
# consistent with step 4, we also use the "impl" variant here.
|
|
||||||
#
|
|
||||||
log_must eval "is_shared_impl $TESTDIR/1"
|
|
||||||
|
|
||||||
# 3. Invoke 'zfs destroy' on the dataset.
|
# 3. Invoke 'zfs destroy' on the dataset.
|
||||||
log_must zfs destroy -f $TESTPOOL/$TESTFS/shared1
|
log_must zfs destroy -f $TESTPOOL/$TESTFS/shared1
|
||||||
|
|
||||||
# 4. Verify the dataset is not shared.
|
# 4. Verify the dataset is not shared.
|
||||||
log_mustnot eval "is_shared_impl $TESTDIR/1"
|
log_mustnot is_shared $TESTDIR/1
|
||||||
|
|
||||||
log_pass "'zfs destroy' will unshare the dataset."
|
log_pass "'zfs destroy' will unshare the dataset."
|
||||||
|
|
Loading…
Reference in New Issue