Whamcloud - gitweb
LU-3649 lfsck: release object reference when reset lfsck 32/7432/2
authorFan Yong <fan.yong@intel.com>
Mon, 15 Jul 2013 14:54:24 +0000 (22:54 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 29 Aug 2013 20:13:06 +0000 (20:13 +0000)
When reset lfsck, related lfsck tracing file will be re-created,
but we forgot to release the object reference of the old tracing
file, then trigger LASSERT() when related device to be released.

Signed-off-by: Fan Yong <fan.yong@intel.com>
Change-Id: I657e539183675e00fe43bbbdfde987c3e48dd13b
Reviewed-on: http://review.whamcloud.com/7432
Tested-by: Hudson
Reviewed-by: Patrick Farrell <paf@cray.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
lustre/mdd/mdd_lfsck.c
lustre/tests/sanity-lfsck.sh

index 3adfda1..b65561c 100644 (file)
@@ -997,6 +997,8 @@ static int mdd_lfsck_namespace_reset(const struct lu_env *env,
        if (rc != 0)
                GOTO(out, rc);
 
+       lu_object_put(env, &com->lc_obj->do_lu);
+       com->lc_obj = NULL;
        dto = local_index_find_or_create(env, mdd->mdd_los, root,
                                         lfsck_namespace_name,
                                         S_IFREG | S_IRUGO | S_IWUSR,
index 2bd6f64..4de4e25 100644 (file)
@@ -128,6 +128,21 @@ test_0() {
                         awk '/^updated_phase1/ { print $2 }')
        [ $repaired -eq 0 ] ||
                error "(10) Expect nothing to be repaired, but got: $repaired"
+
+       local scanned1=$($SHOW_NAMESPACE | awk '/^success_count/ { print $2 }')
+       $START_NAMESPACE -r || error "(11) Fail to reset LFSCK!"
+       sleep 3
+
+       STATUS=$($SHOW_NAMESPACE | awk '/^status/ { print $2 }')
+       [ "$STATUS" == "completed" ] ||
+               error "(12) Expect 'completed', but got '$STATUS'"
+
+       local scanned2=$($SHOW_NAMESPACE | awk '/^success_count/ { print $2 }')
+       [ $((scanned1 + 1)) -eq $scanned2 ] ||
+               error "(13) Expect success $((scanned1 + 1)), but got $scanned2"
+
+       echo "stopall, should NOT crash LU-3649"
+       stopall > /dev/null
 }
 run_test 0 "Control LFSCK manually"