1*2fae26bdSAlan Somers#!/usr/local/bin/ksh93 -p 2*2fae26bdSAlan Somers# 3*2fae26bdSAlan Somers# CDDL HEADER START 4*2fae26bdSAlan Somers# 5*2fae26bdSAlan Somers# The contents of this file are subject to the terms of the 6*2fae26bdSAlan Somers# Common Development and Distribution License (the "License"). 7*2fae26bdSAlan Somers# You may not use this file except in compliance with the License. 8*2fae26bdSAlan Somers# 9*2fae26bdSAlan Somers# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*2fae26bdSAlan Somers# or http://www.opensolaris.org/os/licensing. 11*2fae26bdSAlan Somers# See the License for the specific language governing permissions 12*2fae26bdSAlan Somers# and limitations under the License. 13*2fae26bdSAlan Somers# 14*2fae26bdSAlan Somers# When distributing Covered Code, include this CDDL HEADER in each 15*2fae26bdSAlan Somers# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*2fae26bdSAlan Somers# If applicable, add the following below this CDDL HEADER, with the 17*2fae26bdSAlan Somers# fields enclosed by brackets "[]" replaced with your own identifying 18*2fae26bdSAlan Somers# information: Portions Copyright [yyyy] [name of copyright owner] 19*2fae26bdSAlan Somers# 20*2fae26bdSAlan Somers# CDDL HEADER END 21*2fae26bdSAlan Somers# 22*2fae26bdSAlan Somers 23*2fae26bdSAlan Somers# 24*2fae26bdSAlan Somers# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 25*2fae26bdSAlan Somers# Use is subject to license terms. 26*2fae26bdSAlan Somers. $STF_SUITE/include/libtest.kshlib 27*2fae26bdSAlan Somers 28*2fae26bdSAlan Somers################################################################################ 29*2fae26bdSAlan Somers# 30*2fae26bdSAlan Somers# __stc_assertion_start 31*2fae26bdSAlan Somers# 32*2fae26bdSAlan Somers# ID: compress_003_pos 33*2fae26bdSAlan Somers# 34*2fae26bdSAlan Somers# DESCRIPTION: 35*2fae26bdSAlan Somers# With 'compression' or 'compress' set, changing filesystem blocksize cannot 36*2fae26bdSAlan Somers# cause system panic 37*2fae26bdSAlan Somers# 38*2fae26bdSAlan Somers# STRATEGY: 39*2fae26bdSAlan Somers# 1. Set 'compression' or "compress" to on 40*2fae26bdSAlan Somers# 2. Set different blocksize with ZFS filesystem 41*2fae26bdSAlan Somers# 3. Use 'mkfile' create single block and multi-block files 42*2fae26bdSAlan Somers# 4. Verify the system continued work 43*2fae26bdSAlan Somers# 44*2fae26bdSAlan Somers# TESTABILITY: explicit 45*2fae26bdSAlan Somers# 46*2fae26bdSAlan Somers# TEST_AUTOMATION_LEVEL: automated 47*2fae26bdSAlan Somers# 48*2fae26bdSAlan Somers# CODING_STATUS: COMPLETED (2006-07-26) 49*2fae26bdSAlan Somers# 50*2fae26bdSAlan Somers# __stc_assertion_end 51*2fae26bdSAlan Somers# 52*2fae26bdSAlan Somers################################################################################ 53*2fae26bdSAlan Somers 54*2fae26bdSAlan Somersverify_runnable "both" 55*2fae26bdSAlan Somers 56*2fae26bdSAlan Somersfunction cleanup 57*2fae26bdSAlan Somers{ 58*2fae26bdSAlan Somers $RM -f $TESTDIR/* 59*2fae26bdSAlan Somers} 60*2fae26bdSAlan Somers 61*2fae26bdSAlan Somerslog_assert "Changing blocksize doesn't casue system panic with compression settings" 62*2fae26bdSAlan Somerslog_onexit cleanup 63*2fae26bdSAlan Somers 64*2fae26bdSAlan Somersfs=$TESTPOOL/$TESTFS 65*2fae26bdSAlan Somerssingle_blk_file=$TESTDIR/singleblkfile.${TESTCASE_ID} 66*2fae26bdSAlan Somersmulti_blk_file=$TESTDIR/multiblkfile.${TESTCASE_ID} 67*2fae26bdSAlan Somerstypeset -i blksize=512 68*2fae26bdSAlan Somerstypeset -i fsize=0 69*2fae26bdSAlan Somerstypeset -i offset=0 70*2fae26bdSAlan Somers 71*2fae26bdSAlan Somersfor propname in "compression" "compress" 72*2fae26bdSAlan Somersdo 73*2fae26bdSAlan Somers for value in $(get_compress_opts zfs_compress) 74*2fae26bdSAlan Somers do 75*2fae26bdSAlan Somers log_must $ZFS set $propname=$value $fs 76*2fae26bdSAlan Somers if [[ $value == "gzip-6" ]]; then 77*2fae26bdSAlan Somers value="gzip" 78*2fae26bdSAlan Somers fi 79*2fae26bdSAlan Somers real_val=$(get_prop $propname $fs) 80*2fae26bdSAlan Somers [[ $real_val != $value ]] && \ 81*2fae26bdSAlan Somers log_fail "Set property $propname=$value failed." 82*2fae26bdSAlan Somers 83*2fae26bdSAlan Somers (( blksize = 512 )) 84*2fae26bdSAlan Somers while (( blksize <= 131072 )); do 85*2fae26bdSAlan Somers log_must $ZFS set recordsize=$blksize $fs 86*2fae26bdSAlan Somers (( offset = $RANDOM )) 87*2fae26bdSAlan Somers if (( offset > blksize )); then 88*2fae26bdSAlan Somers (( offset = offset % blksize )) 89*2fae26bdSAlan Somers fi 90*2fae26bdSAlan Somers if (( (offset % 2) == 0 )); then 91*2fae26bdSAlan Somers #keep offset as non-power-of-2 92*2fae26bdSAlan Somers (( offset = offset + 1 )) 93*2fae26bdSAlan Somers fi 94*2fae26bdSAlan Somers (( fsize = offset )) 95*2fae26bdSAlan Somers log_must $MKFILE $fsize $single_blk_file 96*2fae26bdSAlan Somers (( fsize = blksize + offset )) 97*2fae26bdSAlan Somers log_must $MKFILE $fsize $multi_blk_file 98*2fae26bdSAlan Somers 99*2fae26bdSAlan Somers (( blksize = blksize * 2 )) 100*2fae26bdSAlan Somers done 101*2fae26bdSAlan Somers done 102*2fae26bdSAlan Somersdone 103*2fae26bdSAlan Somers 104*2fae26bdSAlan Somerslog_pass "The system works as expected while changing blocksize with compression settings" 105