1d583b39bSJohn Wren Kennedy#!/bin/ksh -p
2d583b39bSJohn Wren Kennedy#
3d583b39bSJohn Wren Kennedy# CDDL HEADER START
4d583b39bSJohn Wren Kennedy#
5d583b39bSJohn Wren Kennedy# The contents of this file are subject to the terms of the
6d583b39bSJohn Wren Kennedy# Common Development and Distribution License (the "License").
7d583b39bSJohn Wren Kennedy# You may not use this file except in compliance with the License.
8d583b39bSJohn Wren Kennedy#
9d583b39bSJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10d583b39bSJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing.
11d583b39bSJohn Wren Kennedy# See the License for the specific language governing permissions
12d583b39bSJohn Wren Kennedy# and limitations under the License.
13d583b39bSJohn Wren Kennedy#
14d583b39bSJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
15d583b39bSJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16d583b39bSJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
17d583b39bSJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
18d583b39bSJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
19d583b39bSJohn Wren Kennedy#
20d583b39bSJohn Wren Kennedy# CDDL HEADER END
21d583b39bSJohn Wren Kennedy#
22d583b39bSJohn Wren Kennedy
23d583b39bSJohn Wren Kennedy#
24d583b39bSJohn Wren Kennedy# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
25d583b39bSJohn Wren Kennedy# Use is subject to license terms.
26d583b39bSJohn Wren Kennedy#
27d583b39bSJohn Wren Kennedy
28d583b39bSJohn Wren Kennedy#
29*1d32ba66SJohn Wren Kennedy# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
30d583b39bSJohn Wren Kennedy#
31d583b39bSJohn Wren Kennedy
32d583b39bSJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib
33d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zfs_set/zfs_set_common.kshlib
34d583b39bSJohn Wren Kennedy
35d583b39bSJohn Wren Kennedy#
36d583b39bSJohn Wren Kennedy# DESCRIPTION:
37d583b39bSJohn Wren Kennedy# While canmount=noauto and  the dataset is mounted,
38d583b39bSJohn Wren Kennedy# zfs must not attempt to unmount it.
39d583b39bSJohn Wren Kennedy#
40d583b39bSJohn Wren Kennedy# STRATEGY:
41d583b39bSJohn Wren Kennedy# 1. Setup a pool and create fs, volume, snapshot clone within it.
42d583b39bSJohn Wren Kennedy# 2. Set canmount=noauto for each dataset and check the return value
43d583b39bSJohn Wren Kennedy#    and check if it still can not be unmounted when the dataset is mounted
44d583b39bSJohn Wren Kennedy#
45d583b39bSJohn Wren Kennedy
46d583b39bSJohn Wren Kennedyverify_runnable "both"
47d583b39bSJohn Wren Kennedy
48d583b39bSJohn Wren Kennedyset -A dataset_pos "$TESTPOOL/$TESTFS" "$TESTPOOL/$TESTCLONE"
49d583b39bSJohn Wren Kennedy
50d583b39bSJohn Wren Kennedyfunction cleanup
51d583b39bSJohn Wren Kennedy{
52d583b39bSJohn Wren Kennedy	i=0
53d583b39bSJohn Wren Kennedy	cd $pwd
54d583b39bSJohn Wren Kennedy	while (( i < ${#dataset_pos[*]} )); do
55d583b39bSJohn Wren Kennedy		ds=${dataset_pos[i]}
56d583b39bSJohn Wren Kennedy		if datasetexists $ds; then
57*1d32ba66SJohn Wren Kennedy			log_must zfs set mountpoint=${old_mnt[i]} $ds
58*1d32ba66SJohn Wren Kennedy			log_must zfs set canmount=${old_canmount[i]} $ds
59d583b39bSJohn Wren Kennedy		fi
60d583b39bSJohn Wren Kennedy		(( i = i + 1 ))
61d583b39bSJohn Wren Kennedy	done
62d583b39bSJohn Wren Kennedy
63d583b39bSJohn Wren Kennedy	ds=$TESTPOOL/$TESTCLONE
64d583b39bSJohn Wren Kennedy	if datasetexists $ds; then
65d583b39bSJohn Wren Kennedy		mntp=$(get_prop mountpoint $ds)
66*1d32ba66SJohn Wren Kennedy		log_must zfs destroy $ds
67d583b39bSJohn Wren Kennedy		if [[ -d $mntp ]]; then
68*1d32ba66SJohn Wren Kennedy			log_must rm -fr $mntp
69d583b39bSJohn Wren Kennedy		fi
70d583b39bSJohn Wren Kennedy	fi
71d583b39bSJohn Wren Kennedy
72d583b39bSJohn Wren Kennedy	if snapexists $TESTPOOL/$TESTFS@$TESTSNAP ; then
73*1d32ba66SJohn Wren Kennedy		log_must zfs destroy -R $TESTPOOL/$TESTFS@$TESTSNAP
74d583b39bSJohn Wren Kennedy	fi
75d583b39bSJohn Wren Kennedy
76*1d32ba66SJohn Wren Kennedy	zfs unmount -a > /dev/null 2>&1
77*1d32ba66SJohn Wren Kennedy	log_must zfs mount -a
78d583b39bSJohn Wren Kennedy}
79d583b39bSJohn Wren Kennedy
80d583b39bSJohn Wren Kennedylog_assert "While canmount=noauto and  the dataset is mounted,"\
81d583b39bSJohn Wren Kennedy		" zfs must not attempt to unmount it"
82d583b39bSJohn Wren Kennedylog_onexit cleanup
83d583b39bSJohn Wren Kennedy
84d583b39bSJohn Wren Kennedyset -A old_mnt
85d583b39bSJohn Wren Kennedyset -A old_canmount
86d583b39bSJohn Wren Kennedytypeset ds
87d583b39bSJohn Wren Kennedytypeset pwd=$PWD
88d583b39bSJohn Wren Kennedy
89*1d32ba66SJohn Wren Kennedylog_must zfs snapshot $TESTPOOL/$TESTFS@$TESTSNAP
90*1d32ba66SJohn Wren Kennedylog_must zfs clone $TESTPOOL/$TESTFS@$TESTSNAP $TESTPOOL/$TESTCLONE
91d583b39bSJohn Wren Kennedy
92d583b39bSJohn Wren Kennedytypeset -i i=0
93d583b39bSJohn Wren Kennedywhile (( i < ${#dataset_pos[*]} )); do
94d583b39bSJohn Wren Kennedy	ds=${dataset_pos[i]}
95d583b39bSJohn Wren Kennedy	old_mnt[i]=$(get_prop mountpoint $ds)
96d583b39bSJohn Wren Kennedy	old_canmount[i]=$(get_prop canmount $ds)
97d583b39bSJohn Wren Kennedy	(( i = i + 1 ))
98d583b39bSJohn Wren Kennedydone
99d583b39bSJohn Wren Kennedy
100d583b39bSJohn Wren Kennedyi=0
101d583b39bSJohn Wren Kennedywhile (( i < ${#dataset_pos[*]} )) ; do
102d583b39bSJohn Wren Kennedy	dataset=${dataset_pos[i]}
103d583b39bSJohn Wren Kennedy	if  ismounted $dataset; then
104d583b39bSJohn Wren Kennedy		log_must cd ${old_mnt[i]}
105d583b39bSJohn Wren Kennedy		set_n_check_prop "noauto" "canmount" "$dataset"
106d583b39bSJohn Wren Kennedy		log_must mounted $dataset
107d583b39bSJohn Wren Kennedy	fi
108d583b39bSJohn Wren Kennedy	(( i = i + 1 ))
109d583b39bSJohn Wren Kennedydone
110d583b39bSJohn Wren Kennedy
111d583b39bSJohn Wren Kennedylog_pass "Setting canmount=noauto to filesystem while dataset busy pass."
112