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 37verify_runnable "both" 38 39typeset -a filesystems 40typeset path=${TEST_BASE_DIR%%/}/testroot$$/$TESTPOOL 41typeset fscount=10 42 43function 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 55function 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 65log_onexit cleanup_all 66 67log_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# 73export __ZFS_POOL_RESTRICT="$TESTPOOL" 74log_must zfs $unmountall 75unset __ZFS_POOL_RESTRICT 76 77# All of our filesystems should be unmounted at this point 78for ((i=0; i<$fscount; i++)); do 79 log_mustnot mounted "$TESTPOOL/$i" 80done 81 82# Create a stray file in one filesystem's mountpoint 83touch $path/0/strayfile 84 85# Verify that zfs mount -a fails 86export __ZFS_POOL_RESTRICT="$TESTPOOL" 87log_mustnot zfs $mountall 88unset __ZFS_POOL_RESTRICT 89 90# All filesystems except for "0" should be mounted 91log_mustnot mounted "$TESTPOOL/0" 92for ((i=1; i<$fscount; i++)); do 93 log_must mounted "$TESTPOOL/$i" 94done 95 96log_pass "'zfs $mountall' failed as expected." 97