From 71237106f68d070266e4f15163d60549a59a2f2e Mon Sep 17 00:00:00 2001 From: huanghua Date: Mon, 13 Nov 2006 03:58:35 +0000 Subject: [PATCH] fix memleak in error case. --- lustre/mdd/mdd_dir.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c index cfe65d6..04018af 100644 --- a/lustre/mdd/mdd_dir.c +++ b/lustre/mdd/mdd_dir.c @@ -863,7 +863,7 @@ static int mdd_create_data(const struct lu_env *env, struct md_object *pobj, mdd_txn_param_build(env, mdd, MDD_TXN_CREATE_DATA_OP); handle = mdd_trans_start(env, mdd); if (IS_ERR(handle)) - RETURN(rc = PTR_ERR(handle)); + GOTO(out_free, rc = PTR_ERR(handle)); /* * XXX: Setting the lov ea is not locked but setting the attr is locked? @@ -883,9 +883,10 @@ static int mdd_create_data(const struct lu_env *env, struct md_object *pobj, if (rc == 0) rc = mdd_attr_get_internal_locked(env, son, ma); + mdd_trans_stop(env, mdd, rc, handle); +out_free: /* Finish mdd_lov_create() stuff. */ mdd_lov_create_finish(env, mdd, rc); - mdd_trans_stop(env, mdd, rc, handle); if (lmm) OBD_FREE(lmm, lmm_size); RETURN(rc); -- 1.8.3.1