Whamcloud - gitweb
Branch: b_new_cmd
authorwangdi <wangdi>
Sun, 22 Oct 2006 04:08:07 +0000 (04:08 +0000)
committerwangdi <wangdi>
Sun, 22 Oct 2006 04:08:07 +0000 (04:08 +0000)
correct handling mdd pdir locks in mdd_rename

lustre/mdd/mdd_dir.c

index b049243..d1d6fe0 100644 (file)
@@ -1323,7 +1323,7 @@ static int mdd_rename(const struct lu_env *env,
                 if (mdd_name2hash(sname) != mdd_name2hash(tname))
                         tdlh = mdd_pdo_write_lock(env, mdd_tpobj, tname);
                 else
-                        tdlh = NULL;
+                        tdlh = sdlh;
         } else if (rc == MDD_RN_SRCTGT) {
                 sdlh = mdd_pdo_write_lock(env, mdd_spobj, sname);
                 tdlh = mdd_pdo_write_lock(env, mdd_tpobj, tname);
@@ -1398,10 +1398,10 @@ static int mdd_rename(const struct lu_env *env,
         }
 
 cleanup:
+        if (likely(tdlh) && sdlh != tdlh)
+                mdd_pdo_write_unlock(env, mdd_tpobj, tdlh);
         if (likely(sdlh))
                 mdd_pdo_write_unlock(env, mdd_spobj, sdlh);
-        if (tdlh)
-                mdd_pdo_write_unlock(env, mdd_tpobj, tdlh);
 cleanup_unlocked:
         mdd_trans_stop(env, mdd, rc, handle);
         if (mdd_sobj)