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 2008 Sun Microsystems, Inc.  All rights reserved.
25d583b39bSJohn Wren Kennedy# Use is subject to license terms.
26d583b39bSJohn Wren Kennedy#
27d583b39bSJohn Wren Kennedy
28*1d32ba66SJohn Wren Kennedy#
29*1d32ba66SJohn Wren Kennedy# Copyright (c) 2016 by Delphix. All rights reserved.
30*1d32ba66SJohn Wren Kennedy#
31*1d32ba66SJohn Wren Kennedy
32d583b39bSJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib
33d583b39bSJohn Wren Kennedy
34d583b39bSJohn Wren Kennedy#
35d583b39bSJohn Wren Kennedy# DESCRIPTION:
36d583b39bSJohn Wren Kennedy#	Long name filesystem with snapshot should not break ZFS.
37d583b39bSJohn Wren Kennedy#
38d583b39bSJohn Wren Kennedy# STRATEGY:
39d583b39bSJohn Wren Kennedy#	1. Create filesystem and snapshot.
40d583b39bSJohn Wren Kennedy#	2. When the snapshot length is 256, rename the filesystem.
41d583b39bSJohn Wren Kennedy#	3. Verify it does not break ZFS
42d583b39bSJohn Wren Kennedy#
43d583b39bSJohn Wren Kennedy
44d583b39bSJohn Wren Kennedyverify_runnable "both"
45d583b39bSJohn Wren Kennedy
46d583b39bSJohn Wren Kennedyfunction cleanup
47d583b39bSJohn Wren Kennedy{
48d583b39bSJohn Wren Kennedy	if datasetexists $initfs ; then
49*1d32ba66SJohn Wren Kennedy		log_must zfs destroy -rf $initfs
50d583b39bSJohn Wren Kennedy	fi
51d583b39bSJohn Wren Kennedy}
52d583b39bSJohn Wren Kennedy
53d583b39bSJohn Wren Kennedylog_assert "Verify long name filesystem with snapshot should not break ZFS."
54d583b39bSJohn Wren Kennedylog_onexit cleanup
55d583b39bSJohn Wren Kennedy
56d583b39bSJohn Wren Kennedyinitfs=$TESTPOOL/$TESTFS/$TESTFS
57d583b39bSJohn Wren Kennedybasefs=$initfs
58d583b39bSJohn Wren Kennedytypeset -i ret=0 len snaplen
59d583b39bSJohn Wren Kennedywhile ((ret == 0)); do
60*1d32ba66SJohn Wren Kennedy	zfs create $basefs
61*1d32ba66SJohn Wren Kennedy	zfs snapshot $basefs@snap1
62d583b39bSJohn Wren Kennedy	ret=$?
63d583b39bSJohn Wren Kennedy
64d583b39bSJohn Wren Kennedy	if ((ret != 0)); then
65*1d32ba66SJohn Wren Kennedy		len=$(echo $basefs | wc -c)
66d583b39bSJohn Wren Kennedy		log_note "The deeply-nested filesystem len: $len"
67d583b39bSJohn Wren Kennedy
68d583b39bSJohn Wren Kennedy		#
69d583b39bSJohn Wren Kennedy		# Make sure there are at lease 2 characters left
70d583b39bSJohn Wren Kennedy		# for snapshot name space, otherwise snapshot name
71d583b39bSJohn Wren Kennedy		# is incorrect
72d583b39bSJohn Wren Kennedy		#
73d583b39bSJohn Wren Kennedy		if ((len >= 255)); then
74d583b39bSJohn Wren Kennedy			if datasetexists $basefs; then
75*1d32ba66SJohn Wren Kennedy				log_must zfs destroy -r $basefs
76d583b39bSJohn Wren Kennedy			fi
77d583b39bSJohn Wren Kennedy			basefs=${basefs%/*}
78*1d32ba66SJohn Wren Kennedy			len=$(echo $basefs| wc -c)
79d583b39bSJohn Wren Kennedy		fi
80d583b39bSJohn Wren Kennedy		break
81d583b39bSJohn Wren Kennedy	fi
82d583b39bSJohn Wren Kennedy
83d583b39bSJohn Wren Kennedy	basefs=$basefs/$TESTFS
84d583b39bSJohn Wren Kennedydone
85d583b39bSJohn Wren Kennedy
86d583b39bSJohn Wren Kennedy# Make snapshot name length match the longest one
87d583b39bSJohn Wren Kennedy((snaplen = 256 - len - 1)) # 1: @
88d583b39bSJohn Wren Kennedysnap=$(gen_dataset_name $snaplen "s")
89*1d32ba66SJohn Wren Kennedylog_must zfs snapshot $basefs@$snap
90d583b39bSJohn Wren Kennedy
91*1d32ba66SJohn Wren Kennedylog_mustnot zfs rename $basefs ${basefs}a
92*1d32ba66SJohn Wren Kennedylog_mustnot zfs rename $basefs ${basefs}-new
93*1d32ba66SJohn Wren Kennedylog_mustnot zfs rename $initfs ${initfs}-new
94*1d32ba66SJohn Wren Kennedylog_mustnot zfs rename $TESTPOOL/$TESTFS $TESTPOOL/$TESTFS-new
95d583b39bSJohn Wren Kennedy
96d583b39bSJohn Wren Kennedylog_pass "Verify long name filesystem with snapshot should not break ZFS."
97