+test_222a () {
+ rm -rf $DIR/$tdir
+ mkdir -p $DIR/$tdir
+ $SETSTRIPE -c 1 -i 0 $DIR/$tdir
+ createmany -o $DIR/$tdir/$tfile 10
+ cancel_lru_locks mdc
+ cancel_lru_locks osc
+ #define OBD_FAIL_LDLM_AGL_DELAY 0x31a
+ $LCTL set_param fail_loc=0x31a
+ ls -l $DIR/$tdir > /dev/null || error "AGL for ls failed"
+ $LCTL set_param fail_loc=0
+ rm -r $DIR/$tdir
+}
+run_test 222a "AGL for ls should not trigger CLIO lock failure ================"
+
+test_222b () {
+ rm -rf $DIR/$tdir
+ mkdir -p $DIR/$tdir
+ $SETSTRIPE -c 1 -i 0 $DIR/$tdir
+ createmany -o $DIR/$tdir/$tfile 10
+ cancel_lru_locks mdc
+ cancel_lru_locks osc
+ #define OBD_FAIL_LDLM_AGL_DELAY 0x31a
+ $LCTL set_param fail_loc=0x31a
+ rm -r $DIR/$tdir || "AGL for rmdir failed"
+ $LCTL set_param fail_loc=0
+}
+run_test 222b "AGL for rmdir should not trigger CLIO lock failure ============="
+
+test_223 () {
+ rm -rf $DIR/$tdir
+ mkdir -p $DIR/$tdir
+ $SETSTRIPE -c 1 -i 0 $DIR/$tdir
+ createmany -o $DIR/$tdir/$tfile 10
+ cancel_lru_locks mdc
+ cancel_lru_locks osc
+ #define OBD_FAIL_LDLM_AGL_NOLOCK 0x31b
+ $LCTL set_param fail_loc=0x31b
+ ls -l $DIR/$tdir > /dev/null || error "reenqueue failed"
+ $LCTL set_param fail_loc=0
+ rm -r $DIR/$tdir
+}
+run_test 223 "osc reenqueue if without AGL lock granted ======================="
+
+test_224a() { # LU-1039, MRP-303
+ #define OBD_FAIL_PTLRPC_CLIENT_BULK_CB 0x508
+ $LCTL set_param fail_loc=0x508
+ dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1 conv=fsync
+ $LCTL set_param fail_loc=0
+ df $DIR
+}
+run_test 224a "Don't panic on bulk IO failure"
+
+test_224b() { # LU-1039, MRP-303
+ dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1
+ cancel_lru_locks osc
+ #define OBD_FAIL_PTLRPC_CLIENT_BULK_CB2 0x515
+ $LCTL set_param fail_loc=0x515
+ dd of=/dev/null if=$DIR/$tfile bs=4096 count=1
+ $LCTL set_param fail_loc=0
+ df $DIR
+}
+run_test 224b "Don't panic on bulk IO failure"
+
+MDSSURVEY=${MDSSURVEY:-$(which mds-survey 2>/dev/null || true)}
+test_225a () {
+ if [ -z ${MDSSURVEY} ]; then
+ skip_env "mds-survey not found" && return
+ fi
+ [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ] ||
+ { skip "Need MDS version at least 2.2.51"; return; }
+
+ local mds=$(facet_host $SINGLEMDS)
+ local target=$(do_nodes $mds 'lctl dl' | \
+ awk "{if (\$2 == \"UP\" && \$3 == \"mdt\") {print \$4}}")
+
+ local cmd1="file_count=1000 thrhi=4"
+ local cmd2="dir_count=2 layer=mdd stripe_count=0"
+ local cmd3="rslt_loc=${TMP} targets=\"$mds:$target\" $MDSSURVEY"
+ local cmd="$cmd1 $cmd2 $cmd3"
+
+ rm -f ${TMP}/mds_survey*
+ echo + $cmd
+ eval $cmd || error "mds-survey with zero-stripe failed"
+ cat ${TMP}/mds_survey*
+ rm -f ${TMP}/mds_survey*
+}
+run_test 225a "Metadata survey sanity with zero-stripe"
+
+test_225b () {
+ if [ -z ${MDSSURVEY} ]; then
+ skip_env "mds-survey not found" && return
+ fi
+ [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ] ||
+ { skip "Need MDS version at least 2.2.51"; return; }
+
+ if [ $($LCTL dl | grep -c osc) -eq 0 ]; then
+ skip_env "Need to mount OST to test" && return
+ fi
+
+ local mds=$(facet_host $SINGLEMDS)
+ local target=$(do_nodes $mds 'lctl dl' | \
+ awk "{if (\$2 == \"UP\" && \$3 == \"mdt\") {print \$4}}")
+
+ local cmd1="file_count=1000 thrhi=4"
+ local cmd2="dir_count=2 layer=mdd stripe_count=1"
+ local cmd3="rslt_loc=${TMP} targets=\"$mds:$target\" $MDSSURVEY"
+ local cmd="$cmd1 $cmd2 $cmd3"
+
+ rm -f ${TMP}/mds_survey*
+ echo + $cmd
+ eval $cmd || error "mds-survey with stripe_count failed"
+ cat ${TMP}/mds_survey*
+ rm -f ${TMP}/mds_survey*
+}
+run_test 225b "Metadata survey sanity with stripe_count = 1"
+
+mcreate_path2fid () {
+ local mode=$1
+ local major=$2
+ local minor=$3
+ local name=$4
+ local desc=$5
+ local path=$DIR/$tdir/$name
+ local fid
+ local rc
+ local fid_path
+
+ $MCREATE --mode=$1 --major=$2 --minor=$3 $path || \
+ error "error: cannot create $desc"
+
+ fid=$($LFS path2fid $path)
+ rc=$?
+ [ $rc -ne 0 ] && error "error: cannot get fid of a $desc"
+
+ fid_path=$($LFS fid2path $DIR $fid)
+ rc=$?
+ [ $rc -ne 0 ] && error "error: cannot get path of a $desc by fid"
+
+ [ "$path" == "$fid_path" ] || \
+ error "error: fid2path returned \`$fid_path', expected \`$path'"
+}
+
+test_226 () {
+ rm -rf $DIR/$tdir
+ mkdir -p $DIR/$tdir
+
+ mcreate_path2fid 0010666 0 0 fifo "FIFO"
+ mcreate_path2fid 0020666 1 3 null "character special file (null)"
+ mcreate_path2fid 0020666 1 255 none "character special file (no device)"
+ mcreate_path2fid 0040666 0 0 dir "directory"
+ mcreate_path2fid 0060666 7 0 loop0 "block special file (loop)"
+ mcreate_path2fid 0100666 0 0 file "regular file"
+ mcreate_path2fid 0120666 0 0 link "symbolic link"
+ mcreate_path2fid 0140666 0 0 sock "socket"
+}
+run_test 226 "call path2fid and fid2path on files of all type"
+