+test_16() {
+ check_mount_and_prep
+ scrub_enable_index_backup
+
+ #define OBD_FAIL_OSD_INDEX_CRASH 0x199
+ do_nodes $(comma_list $(mdts_nodes)) $LCTL set_param fail_loc=0x199
+ scrub_prep 0
+ do_nodes $(comma_list $(mdts_nodes)) $LCTL set_param fail_loc=0
+
+ echo "starting MDTs without disabling OI scrub"
+ scrub_start_mds 1 "$MOUNT_OPTS_SCRUB"
+ mount_client $MOUNT || error "(2) Fail to start client!"
+ scrub_check_data 3
+ scrub_disable_index_backup
+}
+run_test 16 "Initial OI scrub can rebuild crashed index objects"
+
+test_17a() {
+ [ "$mds1_FSTYPE" != "ldiskfs" ] && skip_env "ldiskfs only test"
+
+#define OBD_FAIL_OSD_OI_ENOSPC 0x19d
+ do_facet mds1 $LCTL set_param fail_loc=0x8000019d
+ mkdir $DIR/$tdir && error "mkdir should fail"
+ stop mds1
+ local devname=$(mdsdevname 1)
+
+ stack_trap "start mds1 $devname $MDS_MOUNT_OPTS" EXIT
+ FSCK_MAX_ERR=0 run_e2fsck $(facet_active_host mds1) $devname -n ||
+ error "e2fsck returned $?"
+}
+run_test 17a "ENOSPC on OI insert shouldn't leak inodes"
+
+test_17b() {
+ [ "$mds1_FSTYPE" != "ldiskfs" ] && skip_env "ldiskfs only test"
+
+#define OBD_FAIL_OSD_DOTDOT_ENOSPC 0x19e
+ do_facet mds1 $LCTL set_param fail_loc=0x8000019e
+ mkdir $DIR/$tdir && error "mkdir should fail"
+ stop mds1
+ local devname=$(mdsdevname 1)
+
+ stack_trap "start mds1 $devname $MDS_MOUNT_OPTS" EXIT
+ FSCK_MAX_ERR=0 run_e2fsck $(facet_active_host mds1) $devname -n ||
+ error "e2fsck returned $?"
+}
+run_test 17b "ENOSPC on .. insertion shouldn't leak inodes"
+
+test_18() {
+ local n
+ local fids=()
+ local opts=$(csa_add "$MOUNT_OPTS_SCRUB" -o resetoi)
+
+ scrub_prep 10
+ scrub_start_mds 1 "$MOUNT_OPTS_SCRUB"
+ mount_client $MOUNT || error "(2) Fail to start client!"
+ for n in $(seq $MDSCOUNT); do
+ fids+=($($LFS path2fid $DIR/$tdir/mds$n/test-framework.sh))
+ done
+ cleanup_mount $MOUNT > /dev/null || error "(3) Fail to stop client!"
+ for n in $(seq $MDSCOUNT); do
+ stop mds$n > /dev/null || error "(4) Fail to stop MDS$n!"
+ done
+ scrub_start_mds 5 "$opts"
+ do_facet mds1 dmesg | grep "reset Object Index" ||
+ error "(6) reset log not found"
+ mount_client $MOUNT || error "(7) Fail to start client!"
+ scrub_check_data 7
+
+ local fid
+ local path
+ for n in $(seq $MDSCOUNT); do
+ path=$($LFS fid2path $DIR ${fids[$((n - 1))]})
+ [ "$path" == "$DIR/$tdir/mds$n/test-framework.sh" ] ||
+ error "path mismatch $path != $DIR/$tdir/mds$n/test-framework.sh"
+ fid=$($LFS path2fid $DIR/$tdir/mds$n/test-framework.sh)
+ [ "${fids[$((n - 1))]}" == "$fid" ] ||
+ error "$DIR/$tdir/mds$n/test-framework.sh FID mismatch ${fids[$((n - 1))]} != $fid"
+ done
+}
+run_test 18 "test mount -o resetoi to recreate OI files"
+