. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
init_logging
-[ $(facet_fstype $SINGLEMDS) = "zfs" ] &&
+if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
# bug number for skipped test: LU-2840 LU-2189 LU-2776
ALWAYS_EXCEPT="$ALWAYS_EXCEPT 21 36 51a"
+# LU-2829 / LU-2887 - make allowances for ZFS slowness
+ TEST33_NFILES=${TEST33_NFILES:-1000}
+fi
[ "$SLOW" = "no" ] && EXCEPT_SLOW="33a"
run_test 21 " Try to remove mountpoint on another dir ===="
test_23() { # Bug 5972
- local at_diff=$(do_facet $SINGLEMDS $LCTL get_param -n mdd.*.atime_diff)
+ local at_diff=$(do_facet $SINGLEMDS \
+ $LCTL get_param -n mdd.*MDT0000*.atime_diff | head -1)
echo "atime should be updated while another read" > $DIR1/$tfile
# clear the lock(mode: LCK_PW) gotten from creating operation
run_test 73 "getxattr should not cause xattr lock cancellation"
test_74() {
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.93) ] &&
+ skip "Need MDS version at least 2.4.93" && return
+
dd if=/dev/zero of=$DIR1/$tfile-1 bs=1K count=1
dd if=/dev/zero of=$DIR1/$tfile-2 bs=1K count=1
flocks_test 4 $DIR1/$tfile-1 $DIR2/$tfile-2
}
run_test 74 "flock deadlock: different mounts =============="
+# LU-3889
+test_75() {
+ $LFS setstripe -c 2 -S 1m -i 0 $DIR1/$tfile
+ dd if=/dev/zero of=$DIR1/$tfile bs=1M count=2
+ cancel_lru_locks osc
+
+ dd of=$DIR1/$tfile if=/dev/zero bs=1M count=1 seek=1 conv=notrunc
+ sync
+
+ # define OBD_FAIL_LDLM_ENQUEUE_HANG 0x31d
+ $LCTL set_param fail_loc=0x31d
+ stat -c %s $DIR1/$tfile &
+ local pid=$!
+ sleep 1
+ kill -9 $pid
+
+ # For bad lock error handler we should ASSERT and got kernel panic here
+ sleep 4
+ $LCTL set_param fail_loc=0
+}
+run_test 75 "osc: upcall after unuse lock==================="
+
+test_76() { #LU-946
+ [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.5.53) ]] &&
+ skip "Need MDS version at least 2.5.53" && return
+
+ remote_mds_nodsh && skip "remote MDS with nodsh" && return
+ local fcount=2048
+ local fd
+ local cmd
+ local mdt_idx
+ local mds_idx
+ declare -a fd_list
+ declare -a fid_list
+
+ if remote_mds; then
+ nid=$($LCTL list_nids | sed "s/\./\\\./g")
+ else
+ nid="0@lo"
+ fi
+
+ rm -rf $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
+ if [ $MDSCOUNT -gt 1 ]; then
+ mdt_idx=$($LFS getdirstripe -i $DIR/$tdir)
+ else
+ mdt_idx=0
+ fi
+ mds_idx=$((mdt_idx + 1))
+ proc_ofile="mdt.*$mdt_idx.exports.'$nid'.open_files"
+
+ cancel_lru_locks mdc
+
+ echo -n "open files "
+ ulimit -n 8096
+ for (( i = 0; i < $fcount; i++ )) ; do
+ touch $DIR/$tdir/f_$i
+ fd=$(free_fd)
+ cmd="exec $fd<$DIR/$tdir/f_$i"
+ eval $cmd
+ fd_list[i]=$fd
+ echo -n "."
+ done
+ echo
+
+ fid_list=($(do_facet mds$mds_idx $LCTL get_param -n $proc_ofile))
+
+ # Possible errors in openfiles FID list.
+ # 1. Missing FIDs. Check 1
+ # 2. Extra FIDs. Check 1
+ # 3. Duplicated FID. Check 2
+ # 4. Invalid FIDs. Check 2
+ # 5. Valid FID, points to some other file. Check 3
+
+ # Check 1
+ [ ${#fid_list[@]} -ne $fcount ] &&
+ error "${#fid_list[@]} != $fcount open files"
+
+ for (( i = 0; i < $fcount; i++ )) ; do
+ cmd="exec ${fd_list[i]}</dev/null"
+ eval $cmd
+ filename=$($LFS fid2path $DIR2 ${fid_list[i]})
+
+ # Check 2
+ rm --interactive=no $filename
+ [ $? -ne 0 ] &&
+ error "Nonexisting fid ${fid_list[i]} listed."
+ done
+
+ # Check 3
+ ls_op=$(ls $DIR2/$tdir | wc -l)
+ [ $ls_op -ne 0 ] &&
+ error "Some openfiles are missing in lproc output"
+
+ rm -rf $DIR/$tdir
+}
+run_test 76 "Verify open file for 2048 files"
+
log "cleanup: ======================================================"
[ "$(mount | grep $MOUNT2)" ] && umount $MOUNT2