From: Jinshan Xiong Date: Wed, 1 Aug 2012 22:31:05 +0000 (-0700) Subject: LU-1657 lov: LBUG at lov_fini_raid0() X-Git-Tag: 2.2.93~11 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=315bcc9c23664029b4fc3c3bda41319a8dcc578d;p=fs%2Flustre-release.git LU-1657 lov: LBUG at lov_fini_raid0() The refcount of lsm could be greater than 1 if the object was failed at initialization because llite held another reference. Signed-off-by: Jinshan Xiong Change-Id: I86884eb36f256123e835fdc9e0e585a984f7713a Reviewed-on: http://review.whamcloud.com/3513 Reviewed-by: Johann Lombardi Reviewed-by: jacques-Charles Lafoucriere Tested-by: Hudson Tested-by: Maloo --- diff --git a/lustre/lov/lov_object.c b/lustre/lov/lov_object.c index 7f92431..1941462 100644 --- a/lustre/lov/lov_object.c +++ b/lustre/lov/lov_object.c @@ -313,20 +313,16 @@ static void lov_fini_empty(const struct lu_env *env, struct lov_object *lov, static void lov_fini_raid0(const struct lu_env *env, struct lov_object *lov, union lov_layout_state *state) { - struct lov_layout_raid0 *r0 = &state->raid0; - - ENTRY; + struct lov_layout_raid0 *r0 = &state->raid0; + ENTRY; - if (r0->lo_sub != NULL) { - OBD_FREE_LARGE(r0->lo_sub, r0->lo_nr * sizeof r0->lo_sub[0]); - r0->lo_sub = NULL; - } + if (r0->lo_sub != NULL) { + OBD_FREE_LARGE(r0->lo_sub, r0->lo_nr * sizeof r0->lo_sub[0]); + r0->lo_sub = NULL; + } - LASSERTF(cfs_atomic_read(&lov->lo_lsm->lsm_refc) == 1, - "actual %d proc %p.\n", - cfs_atomic_read(&lov->lo_lsm->lsm_refc), cfs_current()); + dump_lsm(D_INODE, lov->lo_lsm); lov_free_memmd(&lov->lo_lsm); - lov->lo_lsm = NULL; EXIT; }