summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-12-02 12:00:19 -0800
committerSage Weil <sage@newdream.net>2009-12-02 12:00:19 -0800
commitfd0195a9d860b7319d1ab5e8df17be4740b51659 (patch)
treef07f7ffec99fab413667135575ec617b53434b17
parent378e47692359b74d8ea1c99a63d48f37835eabe1 (diff)
downloadceph-fd0195a9d860b7319d1ab5e8df17be4740b51659.tar.gz
mds: set mdr->in[n] in rdlock_path_xlock_dentry
This keeps things consistent with what we'd get with path_traverse. Namely, it means that if done_locking gets set to true, then a future call to rdlock_path_pin_ref can bail out and return mdr->in[n] and get a correct value. This fixes touch mnt/a ls mnt touch mnt/.ceph mds hang on the create request.
-rw-r--r--src/mds/Server.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/mds/Server.cc b/src/mds/Server.cc
index 69f154914d0..6663d5d357e 100644
--- a/src/mds/Server.cc
+++ b/src/mds/Server.cc
@@ -1752,6 +1752,7 @@ CDentry* Server::rdlock_path_xlock_dentry(MDRequest *mdr, int n,
}
mdr->dn[n].push_back(dn);
+ mdr->in[n] = dn->get_projected_linkage()->get_inode();
// -- lock --
for (int i=0; i<(int)mdr->dn[n].size(); i++)