ALWAYS_EXCEPT="$ALWAYS_EXCEPT 2c"
[[ $(lustre_version_code ost1) -lt $(version_code 2.5.50) ]] &&
- ALWAYS_EXCEPT="$ALWAYS_EXCEPT 11 12"
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 11 12 13"
build_test_filter
MDT_DEVNAME=$(mdsdevname ${SINGLEMDS//mds/})
START_NAMESPACE="do_facet $SINGLEMDS \
$LCTL lfsck_start -M ${MDT_DEV} -t namespace"
+START_LAYOUT="do_facet $SINGLEMDS \
+ $LCTL lfsck_start -M ${MDT_DEV} -t layout"
START_LAYOUT_ON_OST="do_facet ost1 $LCTL lfsck_start -M ${OST_DEV} -t layout"
STOP_LFSCK="do_facet $SINGLEMDS $LCTL lfsck_stop -M ${MDT_DEV}"
SHOW_NAMESPACE="do_facet $SINGLEMDS \
$LCTL get_param -n mdd.${MDT_DEV}.lfsck_namespace"
+SHOW_LAYOUT="do_facet $SINGLEMDS \
+ $LCTL get_param -n mdd.${MDT_DEV}.lfsck_layout"
SHOW_LAYOUT_ON_OST="do_facet ost1 \
$LCTL get_param -n obdfilter.${OST_DEV}.lfsck_layout"
MOUNT_OPTS_SCRUB="-o user_xattr"
}
run_test 12 "single command to trigger LFSCK on all devices"
+test_13() {
+ echo "#####"
+ echo "The lmm_oi in layout EA should be consistent with the MDT-object"
+ echo "FID; otherwise, the LFSCK should re-generate the lmm_oi from the"
+ echo "MDT-object FID."
+ echo "#####"
+
+ echo "stopall"
+ stopall > /dev/null
+ echo "formatall"
+ formatall > /dev/null
+ echo "setupall"
+ setupall > /dev/null
+
+ mkdir -p $DIR/$tdir
+
+ echo "Inject failure stub to simulate bad lmm_oi"
+ #define OBD_FAIL_LFSCK_BAD_LMMOI 0x160f
+ do_facet $SINGLEMDS $LCTL set_param fail_loc=0x160f
+ createmany -o $DIR/$tdir/f 32
+ do_facet $SINGLEMDS $LCTL set_param fail_loc=0
+
+ echo "stopall to cleanup object cache"
+ stopall > /dev/null
+ echo "setupall"
+ setupall > /dev/null
+
+ echo "Trigger layout LFSCK to find out the bad lmm_oi and fix them"
+ $START_LAYOUT || error "(1) Fail to start LFSCK for layout!"
+
+ wait_update_facet $SINGLEMDS "$LCTL get_param -n \
+ mdd.${MDT_DEV}.lfsck_layout |
+ awk '/^status/ { print \\\$2 }'" "completed" 3 || return 2
+
+ local repaired=$($SHOW_LAYOUT |
+ awk '/^repaired_others/ { print $2 }')
+ [ $repaired -eq 32 ] ||
+ error "(3) Fail to repair crashed lmm_oi: $repaired"
+}
+run_test 13 "LFSCK can repair crashed lmm_oi"
+
$LCTL set_param debug=-lfsck > /dev/null || true
# restore MDS/OST size