5 # This file and its contents are supplied under the terms of the
6 # Common Development and Distribution License ("CDDL"), version 1.0.
7 # You may only use this file in accordance with the terms of version
10 # A full copy of the text of the CDDL should have accompanied this
11 # source. A copy is of the CDDL is also available via the Internet
12 # at http://www.illumos.org/license/CDDL.
18 # Copyright(c) 2018 Datto Inc.
21 . $STF_SUITE/include/libtest.shlib
25 # Verify multi mount functionality
29 # 2. Create and hold open file in filesystem
31 # 4. Verify remounting fs that was lazily unmounted is possible
32 # 5. Verify multiple mounts of the same dataset are possible
33 # 6. Verify bind mount doesn't prevent rename
36 verify_runnable "both"
40 ismounted $MNTPFS && log_must umount $MNTPFS
41 ismounted $MNTPFS2 && log_must umount $MNTPFS2
42 ismounted $MNTPFS3 && log_must umount $MNTPFS3
43 ismounted $MNTPFS4 && log_must umount $MNTPFS4
44 ismounted $RENAMEMNT && log_must umount $RENAMEMNT
45 datasetexists $TESTDS && log_must destroy_dataset "$TESTDS" "-f"
49 log_assert "Verify multiple mounts into one namespace are possible"
52 TESTDS="$TESTPOOL/multi-mount-test"
53 log_must zfs create $TESTDS
55 # 2. Create and hold open file in filesystem
56 MNTPFS="$(get_prop mountpoint $TESTDS)"
57 FILENAME="$MNTPFS/file"
58 log_must mkfile 128k $FILENAME
59 log_must exec 9<> $FILENAME # open file
63 # FreeBSD does not support lazy unmount
64 log_must umount $MNTPFS
66 log_must umount -l $MNTPFS
68 if [ -f $FILENAME ]; then
69 log_fail "Lazy unmount failed"
72 # 4. Verify remounting fs that was lazily unmounted is possible
73 log_must zfs mount $TESTDS
74 if [ ! -f $FILENAME ]; then
75 log_fail "Lazy remount failed"
77 log_must exec 9>&- # close fd
79 # 5. Verify multiple mounts of the same dataset are possible
80 MNTPFS2="$MNTPFS-second"
81 FILENAME="$MNTPFS2/file"
82 log_must mkdir $MNTPFS2
83 log_must mount -t zfs -o zfsutil $TESTDS $MNTPFS2
84 if [ ! -f $FILENAME ]; then
85 log_fail "First multi mount failed"
88 MNTPFS3="$MNTPFS-third"
89 FILENAME="$MNTPFS3/file"
90 log_must mkdir $MNTPFS3
91 log_must mount -t zfs -o zfsutil $TESTDS $MNTPFS3
92 if [ ! -f $FILENAME ]; then
93 log_fail "Second multi mount failed"
96 # 6. Verify bind mount doesn't prevent rename
97 RENAMEFS="$TESTDS-newname"
98 MNTPFS4="$MNTPFS-fourth"
99 log_must mkdir $MNTPFS4
100 log_must mount --bind $MNTPFS $MNTPFS4
101 log_must zfs rename $TESTDS $RENAMEFS
102 RENAMEMNT="$(get_prop mountpoint $RENAMEFS)"
103 FILENAME="$RENAMEMNT/file"
104 if [ ! -f $FILENAME ]; then
105 log_fail "Rename failed"
107 log_must zfs rename $RENAMEFS $TESTDS
109 log_pass "Multiple mounts are possible"