# LU-4471 - failed rmdir on remote directories still removes directory on MDT0
test_4() {
local MDTIDX=1
- local remote_dir=remote_dir
- test_mkdir $DIR/$remote_dir ||
+ test_mkdir $DIR/$tdir ||
error "Create remote directory failed"
- touch $DIR/$remote_dir/$tfile ||
+ touch $DIR/$tdir/$tfile ||
error "Create file under remote directory failed"
- rmdir $DIR/$remote_dir &&
- error "Expect error removing in-use dir $DIR/$remote_dir"
+ rmdir $DIR/$tdir &&
+ error "Expect error removing in-use dir $DIR/$tdir"
- test -d $DIR/$remote_dir || error "Remote directory disappeared"
+ test -d $DIR/$tdir || error "Remote directory disappeared"
- rm -rf $DIR/$remote_dir || error "remove remote dir error"
+ rm -rf $DIR/$tdir || error "remove remote dir error"
}
run_test 4 "mkdir; touch dir/file; rmdir; checkdir (expect error)"
run_test 17e "symlinks: create recursive symlink (should return error) ===="
test_17f() {
- test_mkdir -p $DIR/d17f
- ln -s 1234567890/2234567890/3234567890/4234567890 $DIR/d17f/111
- ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890 $DIR/d17f/222
- ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890 $DIR/d17f/333
- ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890 $DIR/d17f/444
- ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890 $DIR/d17f/555
- ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890/aaaaaaaaaa/bbbbbbbbbb/cccccccccc/dddddddddd/eeeeeeeeee/ffffffffff/ $DIR/d17f/666
- ls -l $DIR/d17f
+ test_mkdir -p $DIR/$tdir
+ ln -s 1234567890/2234567890/3234567890/4234567890 $DIR/$tdir/111
+ ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890 $DIR/$tdir/222
+ ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890 $DIR/$tdir/333
+ ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890 $DIR/$tdir/444
+ ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890 $DIR/$tdir/555
+ ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890/aaaaaaaaaa/bbbbbbbbbb/cccccccccc/dddddddddd/eeeeeeeeee/ffffffffff/ $DIR/$tdir/666
+ ls -l $DIR/$tdir
}
run_test 17f "symlinks: long and very long symlink name ========================"
run_test 17o "stat file with incompat LMA feature"
test_18() {
- touch $DIR/f || error "Failed to touch $DIR/f: $?"
+ touch $DIR/$tfile || error "Failed to touch $DIR/$tfile: $?"
ls $DIR || error "Failed to ls $DIR: $?"
}
run_test 18 "touch .../f ; ls ... =============================="
run_test 24t "mkdir .../R16a/b/c; rename .../R16a/b/c .../R16a ="
test_24u() { # bug12192
- rm -rf $DIR/$tfile
$MULTIOP $DIR/$tfile C2w$((2048 * 1024))c || error
$CHECKSTAT -s $((2048 * 1024)) $DIR/$tfile || error "wrong file size"
}
dd if=/dev/zero bs=$SZ1 count=1 >> $DIR/$tfile || return 2
dd if=$DIR/$tfile of=$DIR/${tfile}_left bs=1M skip=4097 || return 3
SZ2=`ls -l $DIR/${tfile}_left | awk '{print $5}'`
- [ "$SZ1" = "$SZ2" ] || \
+ [[ "$SZ1" -eq "$SZ2" ]] ||
error "Error reading at the end of the file $tfile"
}
run_test 24w "Reading a file larger than 4Gb"
run_test 32n "open d32n/symlink->tmp/symlink->lustre-root ======"
test_32o() {
- rm -fr $DIR/d32o $DIR/$tfile
touch $DIR/$tfile
test_mkdir -p $DIR/d32o/tmp
TMP_DIR=$DIR/d32o/tmp
rm -fr $DIR/d33
test_mkdir -p $DIR/d33
chown $RUNAS_ID $DIR/d33
- $RUNAS $OPENFILE -f 1286739555 $DIR/d33/f33 && error "create" || true
+ $RUNAS $OPENFILE -f 1286739555 $DIR/d33/f33
}
-run_test 33b "test open file with malformed flags (No panic and return error)"
+run_test 33b "test open file with malformed flags (No panic)"
test_33c() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
}
run_test 33d "openfile with 444 modes and malformed flags under remote dir"
+test_33e() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+ mkdir $DIR/$tdir
+
+ $LFS setdirstripe -i0 -c2 $DIR/$tdir/striped_dir
+ $LFS setdirstripe -i1 -c2 $DIR/$tdir/striped_dir1
+ mkdir $DIR/$tdir/local_dir
+
+ local s0_mode=$(stat -c%f $DIR/$tdir/striped_dir)
+ local s1_mode=$(stat -c%f $DIR/$tdir/striped_dir1)
+ local l_mode=$(stat -c%f $DIR/$tdir/local_dir)
+
+ [ "$l_mode" = "$s0_mode" -a "$l_mode" = "$s1_mode" ] ||
+ error "mkdir $l_mode striped0 $s0_mode striped1 $s1_mode"
+
+ rmdir $DIR/$tdir/* || error "rmdir failed"
+
+ umask 777
+ $LFS setdirstripe -i0 -c2 $DIR/$tdir/striped_dir
+ $LFS setdirstripe -i1 -c2 $DIR/$tdir/striped_dir1
+ mkdir $DIR/$tdir/local_dir
+
+ s0_mode=$(stat -c%f $DIR/$tdir/striped_dir)
+ s1_mode=$(stat -c%f $DIR/$tdir/striped_dir1)
+ l_mode=$(stat -c%f $DIR/$tdir/local_dir)
+
+ [ "$l_mode" = "$s0_mode" -a "$l_mode" = "$s1_mode" ] ||
+ error "mkdir $l_mode striped0 $s0_mode striped1 $s1_mode 777"
+
+ rmdir $DIR/$tdir/* || error "rmdir(umask 777) failed"
+
+ umask 000
+ $LFS setdirstripe -i0 -c2 $DIR/$tdir/striped_dir
+ $LFS setdirstripe -i1 -c2 $DIR/$tdir/striped_dir1
+ mkdir $DIR/$tdir/local_dir
+
+ s0_mode=$(stat -c%f $DIR/$tdir/striped_dir)
+ s1_mode=$(stat -c%f $DIR/$tdir/striped_dir1)
+ l_mode=$(stat -c%f $DIR/$tdir/local_dir)
+
+ [ "$l_mode" = "$s0_mode" -a "$l_mode" = "$s1_mode" ] ||
+ error "mkdir $l_mode striped0 $s0_mode striped1 $s1_mode 0"
+}
+run_test 33e "mkdir and striped directory should have same mode"
+
TEST_34_SIZE=${TEST_34_SIZE:-2000000000000}
test_34a() {
rm -f $DIR/f34
}
run_test 51d "check object distribution ===================="
+test_51e() {
+ if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then
+ skip "Only applicable to ldiskfs-based MDTs"
+ return
+ fi
+
+ test_mkdir -c1 $DIR/$tdir || error "create $tdir failed"
+ test_mkdir -c1 $DIR/$tdir/d0 || error "create d0 failed"
+
+ touch $DIR/$tdir/d0/foo
+ createmany -l $DIR/$tdir/d0/foo $DIR/$tdir/d0/f- 65001 &&
+ error "file exceed 65000 nlink limit!"
+ unlinkmany $DIR/$tdir/d0/f- 65001
+ return 0
+}
+run_test 51e "check file nlink limit"
+
test_52a() {
[ -f $DIR/$tdir/foo ] && chattr -a $DIR/$tdir/foo
test_mkdir -p $DIR/$tdir
loopdev="$DIR/loop54c"
trap 0
- $UMOUNT -d $tdir || rc=$?
+ $UMOUNT -d $DIR/$tdir || rc=$?
losetup -d $loopdev || true
- rm $loopdev
+ losetup -d $LOOPDEV || true
+ rm -rf $loopdev $DIR/$tfile $DIR/$tdir
return $rc
}
test_54c() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- tfile="$DIR/f54c"
- tdir="$DIR/d54c"
loopdev="$DIR/loop54c"
find_loop_dev
[ -z "$LOOPNUM" ] && echo "couldn't find empty loop device" && return
- mknod $loopdev b 7 $LOOPNUM
- echo "make a loop file system with $tfile on $loopdev ($LOOPNUM)..."
- dd if=/dev/zero of=$tfile bs=$(get_page_size client) seek=1024 count=1 > /dev/null
- losetup $loopdev $tfile || error "can't set up $loopdev for $tfile"
trap cleanup_54c EXIT
+ mknod $loopdev b 7 $LOOPNUM
+ echo "make a loop file system with $DIR/$tfile on $loopdev ($LOOPNUM)."
+ dd if=/dev/zero of=$DIR/$tfile bs=$(get_page_size client) seek=1024 count=1 > /dev/null
+ losetup $loopdev $DIR/$tfile ||
+ error "can't set up $loopdev for $DIR/$tfile"
mkfs.ext2 $loopdev || error "mke2fs on $loopdev"
- test_mkdir -p $tdir
- mount -t ext2 $loopdev $tdir || error "error mounting $loopdev on $tdir"
- dd if=/dev/zero of=$tdir/tmp bs=`page_size` count=30 || error "dd write"
- df $tdir
- dd if=$tdir/tmp of=/dev/zero bs=`page_size` count=30 || error "dd read"
+ test_mkdir -p $DIR/$tdir
+ mount -t ext2 $loopdev $DIR/$tdir ||
+ error "error mounting $loopdev on $DIR/$tdir"
+ dd if=/dev/zero of=$DIR/$tdir/tmp bs=$(get_page_size client) count=30 ||
+ error "dd write"
+ df $DIR/$tdir
+ dd if=$DIR/$tdir/tmp of=/dev/zero bs=$(get_page_size client) count=30 ||
+ error "dd read"
cleanup_54c
}
run_test 54c "block device works in lustre ====================="
}
run_test 56y "lfs find -L raid0|released"
+test_56z() { # LU-4824
+ # This checks to make sure 'lfs find' continues after errors
+ # There are two classes of errors that should be caught:
+ # - If multiple paths are provided, all should be searched even if one
+ # errors out
+ # - If errors are encountered during the search, it should not terminate
+ # early
+ local i
+ test_mkdir $DIR/$tdir
+ for i in d{0..9}; do
+ test_mkdir $DIR/$tdir/$i
+ done
+ touch $DIR/$tdir/d{0..9}/$tfile
+ $LFS find $DIR/non_existent_dir $DIR/$tdir &&
+ error "$LFS find did not return an error"
+ # Make a directory unsearchable. This should NOT be the last entry in
+ # directory order. Arbitrarily pick the 6th entry
+ chmod 700 $(lfs find $DIR/$tdir -type d | sed '6!d')
+ local count=$($RUNAS $LFS find $DIR/non_existent $DIR/$tdir | wc -l)
+ # The user should be able to see 10 directories and 9 files
+ [ $count == 19 ] || error "$LFS find did not continue after error"
+}
+run_test 56z "lfs find should continue after an error"
+
test_57a() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
# note test will not do anything if MDS is not local
skip_env "User $RUNAS_ID does not exist - skipping"
return 0
}
- # We had better clear the $DIR to get enough space for dd
- rm -rf $DIR/*
touch $DIR/$tfile
chmod 777 $DIR/$tfile
chmod ug+s $DIR/$tfile
}
test_102a() {
- local testfile=$DIR/xattr_testfile
+ local testfile=$DIR/$tfile
touch $testfile
dd if=/dev/urandom of=$file bs=4k count=4 2>&1 > /dev/null
idx=$(printf %04x $i)
BEFORE=$(get_osd_param $list *OST*$idx stats |
- awk '$1 == "cache_access" {sum += $2}
+ awk '$1 == "cache_access" {sum += $7}
END { printf("%0.0f", sum) }')
cancel_lru_locks osc
cat $file >/dev/null
AFTER=$(get_osd_param $list *OST*$idx stats |
- awk '$1 == "cache_access" {sum += $2}
+ awk '$1 == "cache_access" {sum += $7}
END { printf("%0.0f", sum) }')
echo BEFORE:$BEFORE AFTER:$AFTER
function roc_hit() {
local list=$(comma_list $(osts_nodes))
echo $(get_osd_param $list '' stats |
- awk '$1 == "cache_hit" {sum += $2}
+ awk '$1 == "cache_hit" {sum += $7}
END { printf("%0.0f", sum) }')
}
test_160c() {
local rc=0
+ local server_version=$(lustre_version_code $SINGLEMDS)
+
+ [[ $server_version -gt $(version_code 2.5.57) ]] ||
+ [[ $server_version -gt $(version_code 2.5.1) &&
+ $server_version -lt $(version_code 2.5.50) ]] ||
+ { skip "Need MDS version at least 2.5.58 or 2.5.2+"; return; }
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
# Registration step
test_mkdir -p -c1 $DIR/$tdir/d2/p/q/r
# regular file
FID=$($LFS path2fid $DIR/$tdir/d2/$tfile | tr -d '[]')
- check_path "$tdir/d2/$tfile" $FSNAME $FID --link 0
+ check_path "$tdir/d2/$tfile" $FSNAME $FID --link 0 ||
+ error "check path $tdir/d2/$tfile failed"
# softlink
ln -s $DIR/$tdir/d2/$tfile $DIR/$tdir/d2/p/q/r/slink
FID=$($LFS path2fid $DIR/$tdir/d2/p/q/r/slink | tr -d '[]')
- check_path "$tdir/d2/p/q/r/slink" $FSNAME $FID --link 0
+ check_path "$tdir/d2/p/q/r/slink" $FSNAME $FID --link 0 ||
+ error "check path $tdir/d2/p/q/r/slink failed"
# softlink to wrong file
ln -s /this/is/garbage $DIR/$tdir/d2/p/q/r/slink.wrong
FID=$($LFS path2fid $DIR/$tdir/d2/p/q/r/slink.wrong | tr -d '[]')
- check_path "$tdir/d2/p/q/r/slink.wrong" $FSNAME $FID --link 0
+ check_path "$tdir/d2/p/q/r/slink.wrong" $FSNAME $FID --link 0 ||
+ error "check path $tdir/d2/p/q/r/slink.wrong failed"
# hardlink
ln $DIR/$tdir/d2/$tfile $DIR/$tdir/d2/p/q/r/hlink
mv $DIR/$tdir/d2/$tfile $DIR/$tdir/d2/a/b/c/new_file
FID=$($LFS path2fid $DIR/$tdir/d2/a/b/c/new_file | tr -d '[]')
# fid2path dir/fsname should both work
- check_path "$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 1
- check_path "$DIR/$tdir/d2/p/q/r/hlink" $DIR $FID --link 0
+ check_path "$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 1 ||
+ error "check path $tdir/d2/a/b/c/new_file failed"
+ check_path "$DIR/$tdir/d2/p/q/r/hlink" $DIR $FID --link 0 ||
+ error "check path $DIR/$tdir/d2/p/q/r/hlink failed"
# hardlink count: check that there are 2 links
# Doesnt work with CMD yet: 17935
# hardlink indexing: remove the first link
rm $DIR/$tdir/d2/p/q/r/hlink
- check_path "$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 0
+ check_path "$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 0 ||
+ error "check path $DIR/$tdir/d2/a/b/c/new_file failed"
return 0
}
for ((i=0;i<5;i++)); do
FID=$($LFS path2fid $DIR/$tdir/striped_dir/f$i | tr -d '[]') ||
error "get fid for f$i failed"
- check_path "$tdir/striped_dir/f$i" $FSNAME $FID --link 0
+ check_path "$tdir/striped_dir/f$i" $FSNAME $FID --link 0 ||
+ error "check path $tdir/striped_dir/f$i failed"
FID=$($LFS path2fid $DIR/$tdir/striped_dir/d$i | tr -d '[]') ||
error "get fid for d$i failed"
- check_path "$tdir/striped_dir/d$i" $FSNAME $FID --link 0
+ check_path "$tdir/striped_dir/d$i" $FSNAME $FID --link 0 ||
+ error "check path $tdir/striped_dir/d$i failed"
done
return 0
}
run_test 171 "test libcfs_debug_dumplog_thread stuck in do_exit() ======"
-# it would be good to share it with obdfilter-survey/libecho code
+# it would be good to share it with obdfilter-survey/iokit-libecho code
setup_obdecho_osc () {
local rc=0
local ost_nid=$1
# The new system calls are supported in glibc >= 2.14.
test_237() {
- echo "Test file_handle syscalls" > $DIR/$tfile
+ echo "Test file_handle syscalls" > $DIR/$tfile ||
+ error "write failed"
check_fhandle_syscalls $DIR/$tfile ||
error "check_fhandle_syscalls failed"
}
# LU-4659 linkea consistency
test_238() {
+ local server_version=$(lustre_version_code $SINGLEMDS)
+
+ [[ $server_version -gt $(version_code 2.5.57) ]] ||
+ [[ $server_version -gt $(version_code 2.5.1) &&
+ $server_version -lt $(version_code 2.5.50) ]] ||
+ { skip "Need MDS version at least 2.5.58 or 2.5.2+"; return; }
+
touch $DIR/$tfile
ln $DIR/$tfile $DIR/$tfile.lnk
touch $DIR/$tfile.new
}
run_test 238 "Verify linkea consistency"
+test_239() {
+ local list=$(comma_list $(mdts_nodes))
+
+ mkdir -p $DIR/$tdir
+ createmany -o $DIR/$tdir/f- 5000
+ unlinkmany $DIR/$tdir/f- 5000
+ do_nodes $list "lctl set_param -n osp*.*.sync_changes 1"
+ changes=$(do_nodes $list "lctl get_param -n osc.*MDT*.sync_changes \
+ osc.*MDT*.sync_in_flight" | calc_sum)
+ [ "$changes" -eq 0 ] || error "$changes not synced"
+}
+run_test 239 "osp_sync test"
+
+test_240() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+ mkdir -p $DIR/$tdir
+
+ $LFS mkdir -i 0 $DIR/$tdir/d0 ||
+ error "failed to mkdir $DIR/$tdir/d0 on MDT0"
+ $LFS mkdir -i 1 $DIR/$tdir/d0/d1 ||
+ error "failed to mkdir $DIR/$tdir/d0/d1 on MDT1"
+
+ umount_client $MOUNT || error "umount failed"
+ #define OBD_FAIL_TGT_DELAY_CONDITIONAL 0x713
+ do_facet mds2 lctl set_param fail_loc=0x713 fail_val=1
+ mount_client $MOUNT || error "failed to mount client"
+
+ echo "stat $DIR/$tdir/d0/d1, should not fail/ASSERT"
+ stat $DIR/$tdir/d0/d1 || error "fail to stat $DIR/$tdir/d0/d1"
+}
+run_test 240 "race between ldlm enqueue and the connection RPC (no ASSERT)"
+
+cleanup_test_300() {
+ trap 0
+ umask $SAVE_UMASK
+}
test_striped_dir() {
local mdt_index=$1
local stripe_count
local stripe_index
mkdir -p $DIR/$tdir
- $LFS setdirstripe -i $mdt_index -c 2 -t all_char $DIR/$tdir/striped_dir ||
+
+ SAVE_UMASK=$(umask)
+ trap cleanup_test_300 RETURN EXIT
+
+ $LFS setdirstripe -i $mdt_index -c 2 -t all_char -m 755 \
+ $DIR/$tdir/striped_dir ||
error "set striped dir error"
+ local mode=$(stat -c%a $DIR/$tdir/striped_dir)
+ [ "$mode" = "755" ] || error "expect 755 got $mode"
+
stripe_count=$($LFS getdirstripe -c $DIR/$tdir/striped_dir)
if [ "$stripe_count" != "2" ]; then
error "stripe_count is $stripe_count, expect 2"
rmdir $DIR/$tdir/striped_dir ||
error "rmdir striped dir error"
+
+ cleanup_test_300
+
true
}
$LFS setdirstripe -D -c $MDSCOUNT -t all_char $DIR/$tdir/striped_dir ||
error "set default stripe on striped dir error"
+ stripe_count=$($LFS getdirstripe -D -c $DIR/$tdir/striped_dir)
+ [ $stripe_count -eq $MDSCOUNT ] ||
+ error "default stripe wrong expect $MDSCOUNT get $stripe_count"
+
mkdir -p $DIR/$tdir/striped_dir/{test1,test2,test3,test4}
for dir in $(find $DIR/$tdir/striped_dir/*); do
}
run_test 300g "check default striped directory for striped directory"
+test_300h() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local stripe_count
+ local file
+
+ mkdir $DIR/$tdir
+
+ $LFS setdirstripe -i 0 -c$MDSCOUNT -t all_char $DIR/$tdir/striped_dir ||
+ error "set striped dir error"
+
+ createmany -o $DIR/$tdir/striped_dir/f- 10 ||
+ error "create files under striped dir failed"
+
+ # unfortunately, we need to umount to clear dir layout cache for now
+ # once we fully implement dir layout, we can drop this
+ umount_client $MOUNT || error "umount failed"
+ mount_client $MOUNT || error "mount failed"
+
+ #set the stripe to be unknown hash type
+ #define OBD_FAIL_UNKNOWN_LMV_STRIPE 0x1901
+ $LCTL set_param fail_loc=0x1901
+ for ((i = 0; i < 10; i++)); do
+ $CHECKSTAT -t file $DIR/$tdir/striped_dir/f-$i ||
+ error "stat f-$i failed"
+ rm $DIR/$tdir/striped_dir/f-$i || error "unlink f-$i failed"
+ done
+
+ touch $DIR/$tdir/striped_dir/f0 &&
+ error "create under striped dir with unknown hash should fail"
+
+ $LCTL set_param fail_loc=0
+
+ umount_client $MOUNT || error "umount failed"
+ mount_client $MOUNT || error "mount failed"
+
+ return 0
+}
+run_test 300h "client handle unknown hash type striped directory"
+
test_400a() { # LU-1606, was conf-sanity test_74
local extra_flags=''
local out=$TMP/$tfile