run_test 27u "skip object creation on OSC w/o objects =========="
test_27v() { # bug 4900
- [ "$OSTCOUNT" -lt "2" ] && skip_env "too few OSTs" && return
- remote_mds_nodsh && skip "remote MDS with nodsh" && return
- remote_ost_nodsh && skip "remote OST with nodsh" && return
+ [ "$OSTCOUNT" -lt "2" ] && skip_env "too few OSTs" && return
+ remote_mds_nodsh && skip "remote MDS with nodsh" && return
+ remote_ost_nodsh && skip "remote OST with nodsh" && return
exhaust_all_precreations 0x215
reset_enospc
local FINISH=`date +%s`
local TIMEOUT=`lctl get_param -n timeout`
- [ $((FINISH - START)) -ge $((TIMEOUT / 2)) ] && \
+ local PROCESS=$((FINISH - START))
+ [ $PROCESS -ge $((TIMEOUT / 2)) ] && \
error "$FINISH - $START >= $TIMEOUT / 2"
-
+ sleep $((TIMEOUT / 2 - PROCESS))
reset_enospc
}
run_test 27v "skip object creation on slow OST ================="
return 0
}
-export ORIG_CSUM_TYPE=""
+export ORIG_CSUM_TYPE="`lctl get_param -n osc/*osc-[^mM]*/checksum_type |
+ sed 's/.*\[\(.*\)\].*/\1/g' | head -n1`"
CKSUM_TYPES=${CKSUM_TYPES:-"crc32 adler"}
+[ "$ORIG_CSUM_TYPE" = "crc32c" ] && CKSUM_TYPES="$CKSUM_TYPES crc32c"
set_checksum_type()
{
- [ "$ORIG_CSUM_TYPE" ] || \
- ORIG_CSUM_TYPE=`lctl get_param -n osc/*osc-[^mM]*/checksum_type |
- sed 's/.*\[\(.*\)\].*/\1/g' | head -n1`
lctl set_param -n osc.*osc-[^mM]*.checksum_type $1
log "set checksum type to $1"
return 0
OSC=`lctl get_param -n devices | awk '/-osc-/ {print $4}' | head -n 1`
lctl --device %$OSC deactivate
lfs df || error "lfs df with deactivated OSC failed"
- lctl --device %$OSC recover
+ lctl --device %$OSC activate
lfs df || error "lfs df with reactivated OSC failed"
rm -f $DIR/$tfile
}
}
run_test 219 "LU-394: Write partial won't cause uncontiguous pages vec at LND"
+test_220() { #LU-325
+ local OSTIDX=0
+
+ mkdir -p $DIR/$tdir
+ local OST=$(lfs osts | grep ${OSTIDX}": " | \
+ awk '{print $2}' | sed -e 's/_UUID$//')
+
+ # on the mdt's osc
+ local mdtosc_proc1=$(get_mdtosc_proc_path $SINGLEMDS $OST)
+ local last_id=$(do_facet $SINGLEMDS lctl get_param -n \
+ osc.$mdtosc_proc1.prealloc_last_id)
+ local next_id=$(do_facet $SINGLEMDS lctl get_param -n \
+ osc.$mdtosc_proc1.prealloc_next_id)
+
+ $LFS df -i
+
+ do_facet mgs $LCTL pool_new $FSNAME.$TESTNAME || return 1
+ do_facet mgs $LCTL pool_add $FSNAME.$TESTNAME $OST || return 2
+
+ $SETSTRIPE $DIR/$tdir -i $OSTIDX -c 1 -p $FSNAME.$TESTNAME
+
+ echo "preallocated objects in MDS is $((last_id - next_id))" \
+ "($last_id - $next_id)"
+
+ count=$($LFS df -i $MOUNT | grep ^$OST | awk '{print $4}')
+ echo "OST still has $count objects"
+
+ free=$((count + last_id - next_id))
+ echo "create $((free - next_id)) files @next_id..."
+ createmany -o $DIR/$tdir/f $next_id $free || return 3
+
+ local last_id2=$(do_facet mds${MDSIDX} lctl get_param -n \
+ osc.$mdtosc_proc1.prealloc_last_id)
+ local next_id2=$(do_facet mds${MDSIDX} lctl get_param -n \
+ osc.$mdtosc_proc1.prealloc_next_id)
+
+ echo "after creation, last_id=$last_id2, next_id=$next_id2"
+ $LFS df -i
+
+ echo "cleanup..."
+
+ do_facet mgs $LCTL pool_remove $FSNAME.$TESTNAME $OST || return 4
+ do_facet mgs $LCTL pool_destroy $FSNAME.$TESTNAME || return 5
+ echo "unlink $((free - next_id)) files @ $next_id..."
+ unlinkmany $DIR/$tdir/f $next_id $free || return 3
+}
+run_test 220 "the preallocated objects in MDS still can be used if ENOSPC is returned by OST with enough disk space"
+
#
# tests that do cleanup/setup should be run at the end
#