From 348de4763c9322282d446d65677b52bcd6e8e8be Mon Sep 17 00:00:00 2001 From: Niu Yawei Date: Fri, 4 Nov 2011 22:21:12 -0700 Subject: [PATCH] LU-543 mdd: fix rename changelog Current rename changelog stores source fid in both CL_RENAME & CL_EXT records, which is redundant, and the 'tfid' in CL_EXT is never been used. Actually, we'd store target fid in the CL_EXT record, then application could detect the fid unlinked by rename in changelog. Signed-off-by: Niu Yawei Change-Id: I0c616f813657a2faefa60a707f4fc1d9dc971b39 Reviewed-on: http://review.whamcloud.com/1652 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Mikhail Pershin Reviewed-by: Oleg Drokin --- lustre/mdd/mdd_dir.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c index 7491ff3..14c0ed8 100644 --- a/lustre/mdd/mdd_dir.c +++ b/lustre/mdd/mdd_dir.c @@ -2247,9 +2247,16 @@ cleanup_unlocked: if (rc == 0) rc = mdd_changelog_ns_store(env, mdd, CL_RENAME, 0, mdd_tobj, mdd_spobj, lf, lsname, handle); - if (rc == 0) + if (rc == 0) { + struct lu_fid zero_fid; + fid_zero(&zero_fid); + /* If the rename target exist, The CL_EXT record should save + * the target fid as tfid, otherwise, use zero fid. LU-543 */ rc = mdd_changelog_ns_store(env, mdd, CL_EXT, 0, mdd_tobj, - mdd_tpobj, lf, ltname, handle); + mdd_tpobj, + mdd_tobj ? NULL : &zero_fid, + ltname, handle); + } mdd_trans_stop(env, mdd, rc, handle); if (mdd_sobj) -- 1.8.3.1