ALWAYS_EXCEPT+=" 411"
fi
-# 5 12 8 12 (min)"
-[ "$SLOW" = "no" ] && EXCEPT_SLOW="27m 64b 68 71 115 135 136 300o"
+# 5 12 8 12 (min)"
+[ "$SLOW" = "no" ] && EXCEPT_SLOW="27m 60i 64b 68 71 115 135 136 300o"
if [ "$mds1_FSTYPE" = "zfs" ]; then
# bug number for skipped test:
test_27Q() {
rm -f $TMP/$tfile $TMP/$tfile.loop $TMP/$tfile.none $TMP/$tfile.broken
+ stack_trap "rm -f $TMP/$tfile*"
test_mkdir $DIR/$tdir-1
test_mkdir $DIR/$tdir-2
}
run_test 60h "striped directory with missing stripes can be accessed"
+function t60i_load() {
+ mkdir $DIR/$tdir
+ #define OBD_FAIL_LLOG_PAUSE_AFTER_PAD 0x131c
+ $LCTL set_param fail_loc=0x131c fail_val=1
+ for ((i=0; i<5000; i++)); do
+ touch $DIR/$tdir/f$i
+ done
+}
+
+test_60i() {
+ changelog_register || error "changelog_register failed"
+ local cl_user="${CL_USERS[$SINGLEMDS]%% *}"
+ changelog_users $SINGLEMDS | grep -q $cl_user ||
+ error "User $cl_user not found in changelog_users"
+ changelog_chmask "ALL"
+ t60i_load &
+ local PID=$!
+ for((i=0; i<100; i++)); do
+ changelog_dump >/dev/null ||
+ error "can't read changelog"
+ done
+ kill $PID
+ wait $PID
+ changelog_deregister || error "changelog_deregister failed"
+ $LCTL set_param fail_loc=0
+}
+run_test 60i "llog: new record vs reader race"
+
test_61a() {
[ $PARALLEL == "yes" ] && skip "skip parallel run"
which getfattr > /dev/null 2>&1 || skip_env "no getfattr command"
which setfattr > /dev/null 2>&1 || skip_env "no setfattr command"
- local root_layout=$(save_layout $MOUNT)
- stack_trap "restore_layout $MOUNT $root_layout" EXIT
+ save_layout_restore_at_exit $MOUNT
# new subdirectory under root directory should not inherit
# the default layout from root
}
run_test 160m "Changelog clear race"
+test_160n() {
+ remote_mds_nodsh && skip "remote MDS with nodsh" && return
+ [[ $MDS1_VERSION -ge $(version_code 2.14.51) ]] ||
+ skip "Need MDS version at least 2.14.51"
+ local cl_users
+ local cl_user1
+ local cl_user2
+ local pid1
+ local first_rec
+ local last_rec=0
+
+ # Create a user
+ changelog_register || error "first changelog_register failed"
+
+ cl_users=(${CL_USERS[mds1]})
+ cl_user1="${cl_users[0]}"
+
+ # generate some changelog records to accumulate on MDT0
+ test_mkdir -i0 -c1 $DIR/$tdir || error "test_mkdir $tdir failed"
+ first_rec=$(changelog_users $SINGLEMDS |
+ awk '/^current.index:/ { print $NF }')
+ while (( last_rec < (( first_rec + 65000)) )); do
+ createmany -m $DIR/$tdir/$tfile 10000 ||
+ error "create $DIR/$tdir/$tfile failed"
+
+ for i in $(seq 0 10000); do
+ mrename $DIR/$tdir/$tfile$i $DIR/$tdir/$tfile-new$i \
+ > /dev/null
+ done
+
+ unlinkmany $DIR/$tdir/$tfile-new 10000 ||
+ error "unlinkmany failed unlink"
+ last_rec=$(changelog_users $SINGLEMDS |
+ awk '/^current.index:/ { print $NF }')
+ echo last record $last_rec
+ (( last_rec == 0 )) && error "no changelog found"
+ done
+
+#define OBD_FAIL_MDS_CHANGELOG_DEL 0x16c
+ do_facet mds1 $LCTL set_param fail_loc=0x8000016c fail_val=0
+
+ __changelog_clear mds1 $cl_user1 0 &
+ pid1=$!
+ sleep 2
+ __changelog_clear mds1 $cl_user1 0 ||
+ error "fail to cancel record for $cl_user1"
+ wait $pid1
+ [[ $? -eq 0 ]] || error "fail to cancel record for $cl_user2"
+}
+run_test 160n "Changelog destroy race"
test_161a() {
[ $PARALLEL == "yes" ] && skip "skip parallel run"