From 315bcc9c23664029b4fc3c3bda41319a8dcc578d Mon Sep 17 00:00:00 2001 From: Jinshan Xiong Date: Wed, 1 Aug 2012 15:31:05 -0700 Subject: [PATCH] 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 --- lustre/lov/lov_object.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) 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; } -- 1.8.3.1