Whamcloud - gitweb
LU-9820 osd-ldiskfs: OI scrub speed limit fix
[fs/lustre-release.git] / lustre / tests / sanity-scrub.sh
index 8c12490..3a90dc0 100644 (file)
@@ -911,6 +911,7 @@ test_9() {
        sleep $RUN_TIME1
        scrub_check_status 6 completed
        scrub_check_flags 7 ""
+
        # OI scrub should run with limited speed under non-inconsistent case
        scrub_start 8 -s $BASE_SPEED1 -r
 
@@ -943,16 +944,17 @@ test_9() {
        done
        sleep $RUN_TIME2
 
-       # MIN_MARGIN = 0.8 = 8 / 10
+       # 30% margin
+       local MARGIN=3
        local MIN_SPEED=$(((PRE_FETCHED + \
                            BASE_SPEED1 * (RUN_TIME1 - TIME_DIFF) + \
                            BASE_SPEED2 * (RUN_TIME2 - TIME_DIFF)) / \
-                          (RUN_TIME1 + RUN_TIME2) * 8 / 10))
+                          (RUN_TIME1 + RUN_TIME2) * (10 - MARGIN) / 10))
        # MAX_MARGIN = 1.2 = 12 / 10
        MAX_SPEED=$(((PRE_FETCHED + \
                      BASE_SPEED1 * (RUN_TIME1 + TIME_DIFF) + \
                      BASE_SPEED2 * (RUN_TIME2 + TIME_DIFF)) / \
-                    (RUN_TIME1 + RUN_TIME2) * 12 / 10))
+                    (RUN_TIME1 + RUN_TIME2) * (10 + MARGIN) / 10))
        for n in $(seq $MDSCOUNT); do
                SPEED=$(scrub_status $n | awk '/^average_speed/ { print $2 }')
                [ $SPEED -gt $MIN_SPEED ] ||
@@ -1272,6 +1274,37 @@ test_16() {
 }
 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"
+
+
 # restore MDS/OST size
 MDSSIZE=${SAVED_MDSSIZE}
 OSTSIZE=${SAVED_OSTSIZE}