1f38cb554SJohn Wren Kennedy#! /bin/ksh -p
2f38cb554SJohn Wren Kennedy#
3f38cb554SJohn Wren Kennedy# CDDL HEADER START
4f38cb554SJohn Wren Kennedy#
5f38cb554SJohn Wren Kennedy# The contents of this file are subject to the terms of the
6f38cb554SJohn Wren Kennedy# Common Development and Distribution License (the "License").
7f38cb554SJohn Wren Kennedy# You may not use this file except in compliance with the License.
8f38cb554SJohn Wren Kennedy#
9f38cb554SJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10f38cb554SJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing.
11f38cb554SJohn Wren Kennedy# See the License for the specific language governing permissions
12f38cb554SJohn Wren Kennedy# and limitations under the License.
13f38cb554SJohn Wren Kennedy#
14f38cb554SJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
15f38cb554SJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16f38cb554SJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
17f38cb554SJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
18f38cb554SJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
19f38cb554SJohn Wren Kennedy#
20f38cb554SJohn Wren Kennedy# CDDL HEADER END
21f38cb554SJohn Wren Kennedy#
22f38cb554SJohn Wren Kennedy
23f38cb554SJohn Wren Kennedy#
24f38cb554SJohn Wren Kennedy# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
25f38cb554SJohn Wren Kennedy# Use is subject to license terms.
26f38cb554SJohn Wren Kennedy#
27f38cb554SJohn Wren Kennedy
28f38cb554SJohn Wren Kennedy#
291d32ba66SJohn Wren Kennedy# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
30f38cb554SJohn Wren Kennedy#
31f38cb554SJohn Wren Kennedy
32f38cb554SJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib
33f38cb554SJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zfs_rollback/zfs_rollback_common.kshlib
34f38cb554SJohn Wren Kennedy. $STF_SUITE/tests/functional/snapshot/snapshot.cfg
35f38cb554SJohn Wren Kennedy
36f38cb554SJohn Wren Kennedy
37f38cb554SJohn Wren Kennedy#
38f38cb554SJohn Wren Kennedy# DESCRIPTION:
39f38cb554SJohn Wren Kennedy# Verify that rollbacks succeed when there are nested file systems.
40f38cb554SJohn Wren Kennedy#
41f38cb554SJohn Wren Kennedy# STRATEGY:
42f38cb554SJohn Wren Kennedy# 1) Snapshot an empty file system and rollback
43f38cb554SJohn Wren Kennedy# 2) Create a file in the file system
44f38cb554SJohn Wren Kennedy# 3) Rollback the file system to empty
45f38cb554SJohn Wren Kennedy# 4) Create a nested file system with the same name as the file created in (2)
46f38cb554SJohn Wren Kennedy# 5) Verify a rollback succeeds
47f38cb554SJohn Wren Kennedy#
48f38cb554SJohn Wren Kennedy
49f38cb554SJohn Wren Kennedyverify_runnable "both"
50f38cb554SJohn Wren Kennedy
51f38cb554SJohn Wren Kennedyfunction cleanup
52f38cb554SJohn Wren Kennedy{
53f38cb554SJohn Wren Kennedy	typeset snap=""
54f38cb554SJohn Wren Kennedy	typeset fs=""
55f38cb554SJohn Wren Kennedy
56f38cb554SJohn Wren Kennedy	export __ZFS_POOL_RESTRICT="$TESTPOOL"
571d32ba66SJohn Wren Kennedy	log_must zfs mount -a
58f38cb554SJohn Wren Kennedy	unset __ZFS_POOL_RESTRICT
59f38cb554SJohn Wren Kennedy
60f38cb554SJohn Wren Kennedy	for snap in "$SNAPPOOL.1" "$SNAPPOOL"
61f38cb554SJohn Wren Kennedy	do
62f38cb554SJohn Wren Kennedy		snapexists $snap
63f38cb554SJohn Wren Kennedy		[[ $? -eq 0 ]] && \
641d32ba66SJohn Wren Kennedy			log_must zfs destroy $snap
65f38cb554SJohn Wren Kennedy	done
66f38cb554SJohn Wren Kennedy
67f38cb554SJohn Wren Kennedy	for fs in "$TESTPOOL/$TESTFILE/$TESTFILE.1" "$TESTPOOL/$TESTFILE"
68f38cb554SJohn Wren Kennedy	do
69f38cb554SJohn Wren Kennedy		datasetexists $fs
70f38cb554SJohn Wren Kennedy		[[ $? -eq 0 ]] && \
711d32ba66SJohn Wren Kennedy			log_must zfs destroy -r $fs
72f38cb554SJohn Wren Kennedy	done
73f38cb554SJohn Wren Kennedy
74f38cb554SJohn Wren Kennedy	[[ -e /$TESTPOOL ]] && \
751d32ba66SJohn Wren Kennedy		log_must rm -rf $TESTPOOL/*
76f38cb554SJohn Wren Kennedy}
77f38cb554SJohn Wren Kennedy
78f38cb554SJohn Wren Kennedylog_assert "Verify rollback succeeds when there are nested file systems."
79f38cb554SJohn Wren Kennedy
80f38cb554SJohn Wren Kennedylog_onexit cleanup
81f38cb554SJohn Wren Kennedy
821d32ba66SJohn Wren Kennedylog_must zfs snapshot $SNAPPOOL
831d32ba66SJohn Wren Kennedylog_must zfs rollback $SNAPPOOL
841d32ba66SJohn Wren Kennedylog_mustnot zfs snapshot $SNAPPOOL
85f38cb554SJohn Wren Kennedy
861d32ba66SJohn Wren Kennedylog_must touch /$TESTPOOL/$TESTFILE
87*09fbbb7dSAllan Judesync_pool $TESTPOOL
88f38cb554SJohn Wren Kennedy
891d32ba66SJohn Wren Kennedylog_must zfs rollback $SNAPPOOL
901d32ba66SJohn Wren Kennedylog_must zfs create $TESTPOOL/$TESTFILE
91f38cb554SJohn Wren Kennedy
921d32ba66SJohn Wren Kennedylog_must zfs rollback $SNAPPOOL
93f38cb554SJohn Wren Kennedy
94f38cb554SJohn Wren Kennedylog_note "Verify rollback of multiple nested file systems succeeds."
951d32ba66SJohn Wren Kennedylog_must zfs snapshot $TESTPOOL/$TESTFILE@$TESTSNAP
961d32ba66SJohn Wren Kennedylog_must zfs snapshot $SNAPPOOL.1
97f38cb554SJohn Wren Kennedy
98f38cb554SJohn Wren Kennedyexport __ZFS_POOL_RESTRICT="$TESTPOOL"
991d32ba66SJohn Wren Kennedylog_must zfs unmount -a
1001d32ba66SJohn Wren Kennedylog_must zfs mount -a
101f38cb554SJohn Wren Kennedyunset __ZFS_POOL_RESTRICT
102f38cb554SJohn Wren Kennedy
1031d32ba66SJohn Wren Kennedylog_must touch /$TESTPOOL/$TESTFILE/$TESTFILE.1
104f38cb554SJohn Wren Kennedy
1051d32ba66SJohn Wren Kennedylog_must zfs rollback $SNAPPOOL.1
106f38cb554SJohn Wren Kennedy
107f38cb554SJohn Wren Kennedylog_pass "Rollbacks succeed when nested file systems are present."
108