1 #!/bin/ksh -p
2 #
3 # CDDL HEADER START
4 #
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
8 # 1.0 of the CDDL.
9 #
10 # A full copy of the text of the CDDL should have accompanied this
11 # source. A copy of the CDDL is also available via the Internet at
12 # http://www.illumos.org/license/CDDL.
13 #
14 # CDDL HEADER END
15 #
16
17 #
18 # Copyright (c) 2017 by Delphix. All rights reserved.
19 #
20
21 . $STF_SUITE/include/libtest.shlib
22 . $STF_SUITE/tests/functional/cli_root/zfs_mount/zfs_mount.kshlib
23
24 # DESCRIPTION:
25 # Verify that if 'zfs mount -a' fails to mount one filesystem,
26 # the command fails with a non-zero error code, but all other
27 # filesystems are mounted.
28 #
29 # STRATEGY:
30 # 1. Create zfs filesystems
31 # 2. Unmount a leaf filesystem
32 # 3. Create a file in the above filesystem's mountpoint
33 # 4. Verify that 'zfs mount -a' fails to mount the above
34 # 5. Verify that all other filesystems were mounted
35 #
36
37 verify_runnable "both"
38
39 typeset -a filesystems
40 typeset path=${TEST_BASE_DIR%%/}/testroot$$/$TESTPOOL
41 typeset fscount=10
42
43 function setup_all
44 {
45 # Create $fscount filesystems at the top level of $path
46 for ((i=0; i<$fscount; i++)); do
47 setup_filesystem "$DISKS" "$TESTPOOL" $i "$path/$i" ctr
48 done
49
50 zfs list -r $TESTPOOL
51
52 return 0
53 }
54
55 function cleanup_all
56 {
57 export __ZFS_POOL_RESTRICT="$TESTPOOL"
58 log_must zfs $unmountall
59 unset __ZFS_POOL_RESTRICT
60
61 [[ -d ${TEST_BASE_DIR%%/}/testroot$$ ]] && \
62 rm -rf ${TEST_BASE_DIR%%/}/testroot$$
63 }
64
65 log_onexit cleanup_all
66
67 log_must setup_all
68
69 #
70 # Unmount all of the above so that we can create the stray file
71 # in one of the mountpoint directories.
72 #
73 export __ZFS_POOL_RESTRICT="$TESTPOOL"
74 log_must zfs $unmountall
75 unset __ZFS_POOL_RESTRICT
76
77 # All of our filesystems should be unmounted at this point
78 for ((i=0; i<$fscount; i++)); do
79 log_mustnot mounted "$TESTPOOL/$i"
80 done
81
82 # Create a stray file in one filesystem's mountpoint
83 touch $path/0/strayfile
84
85 # Verify that zfs mount -a fails
86 export __ZFS_POOL_RESTRICT="$TESTPOOL"
87 log_mustnot zfs $mountall
88 unset __ZFS_POOL_RESTRICT
89
90 # All filesystems except for "0" should be mounted
91 log_mustnot mounted "$TESTPOOL/0"
92 for ((i=1; i<$fscount; i++)); do
93 log_must mounted "$TESTPOOL/$i"
94 done
95
96 log_pass "'zfs $mountall' failed as expected."