Skip snapshot in zfs_iter_mounted()

The intention of the zfs_iter_mounted() is to traverse the dataset
and its descendants, not the snapshots. The current code can cause
a mounted snapshot to be included and thus zfs_open() on the snapshot
with ZFS_TYPE_FILESYSTEM would print confusing message such as "cannot
open 'rpool/fs@snap': snapshot delimiter '@' is not expected here".

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Youzhong Yang <yyang@mathworks.com>
Closes #12447
Closes #12448
This commit is contained in:
youzhongyang
2021-10-20 19:07:19 -04:00
committed by GitHub
parent 1886cdfcfb
commit ec64fdb93d
3 changed files with 59 additions and 6 deletions
@@ -83,7 +83,7 @@ for d in ${test_depths[@]}; do
log_must zfs snapshot $TESTPOOL/$ds@snap
# force snapshot mount in .zfs
log_must ls /$TESTPOOL/$ds/.zfs/snapshot/snap
log_must zfs unmount $TESTPOOL/$ds
log_must_nostderr zfs unmount $TESTPOOL/$ds
if ! ismounted $TESTPOOL/$ds_pre; then
log_fail "$ds_pre is not mounted"
@@ -113,7 +113,7 @@ for d in ${test_depths[@]}; do
log_must zfs snapshot $TESTPOOL/$ds@snap
# force snapshot mount in .zfs
log_must ls /$TESTPOOL/$ds/.zfs/snapshot/snap
log_must zfs unmount $TESTPOOL/$ds
log_must_nostderr zfs unmount $TESTPOOL/$ds
if ! ismounted $TESTPOOL/$ds_pre; then
log_fail "$TESTPOOL/$ds_pre (pre) not mounted"
@@ -143,7 +143,7 @@ for d in ${test_depths[@]}; do
log_must zfs snapshot $TESTPOOL/$ds@snap
# force snapshot mount in .zfs
log_must ls /$TESTPOOL/$ds/.zfs/snapshot/snap
log_must zfs unmount $TESTPOOL/$ds
log_must_nostderr zfs unmount $TESTPOOL/$ds
if ! ismounted $TESTPOOL/$ds_pre; then
log_fail "$TESTPOOL/$ds_pre (pre) not mounted"
@@ -173,7 +173,7 @@ for d in ${test_depths[@]}; do
log_must zfs snapshot $TESTPOOL/$ds@snap
# force snapshot mount in .zfs
log_must ls /$TESTPOOL/$ds/.zfs/snapshot/snap
log_must zfs unmount $TESTPOOL/$ds
log_must_nostderr zfs unmount $TESTPOOL/$ds
if ! ismounted $TESTPOOL/$ds_pre; then
log_fail "$ds_pre is not mounted"