From ab074f434b198c86872954402b94857d7cec38c4 Mon Sep 17 00:00:00 2001 From: wang di Date: Wed, 9 Sep 2015 21:06:11 -0700 Subject: [PATCH] LU-7078 llite: reset md->lmv to NULL ll_update_lsm_md() should reset md->lmv to NULL right after it is assigned to lli_lsm_md, otherwise it might be double freed if failure happens. Signed-off-by: wang di Change-Id: I4f069e3445a957860c2853c6f32104885edc33fa Reviewed-on: http://review.whamcloud.com/16382 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: John L. Hammond Reviewed-by: James Simmons Reviewed-by: Oleg Drokin --- lustre/llite/llite_lib.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index 4a21af3..afb7b55 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -1329,6 +1329,9 @@ static int ll_update_lsm_md(struct inode *inode, struct lustre_md *md) if (rc != 0) RETURN(rc); + /* set md->lmv to NULL, so the following free lustre_md + * will not free this lsm */ + md->lmv = NULL; lli->lli_lsm_md = lsm; OBD_ALLOC_PTR(attr); @@ -1356,10 +1359,6 @@ static int ll_update_lsm_md(struct inode *inode, struct lustre_md *md) OBD_FREE_PTR(attr); - - /* set lsm_md to NULL, so the following free lustre_md - * will not free this lsm */ - md->lmv = NULL; CDEBUG(D_INODE, "Set lsm %p magic %x to "DFID"\n", lsm, lsm->lsm_md_magic, PFID(ll_inode2fid(inode))); RETURN(0); -- 1.8.3.1