From 084a1c747dc9ebf8b8baf37b22d9777b50335bbf Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 7 Jun 2011 11:11:07 -0700 Subject: [PATCH] client: fix mds selection for unlink It was broken when a remote link target was on another mds. Signed-off-by: Sage Weil --- src/client/Client.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 4cc621398f15a..ee1ea55958929 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -6110,15 +6110,17 @@ int Client::_unlink(Inode *dir, const char *name, int uid, int gid) dir->make_nosnap_relative_path(path); path.push_dentry(name); req->set_filepath(path); - req->inode = dir; - req->dentry_drop = CEPH_CAP_FILE_SHARED; - req->dentry_unless = CEPH_CAP_FILE_EXCL; - req->inode_drop = CEPH_CAP_LINK_SHARED | CEPH_CAP_LINK_EXCL; int res = get_or_create(dir, name, &req->dentry); if (res < 0) return res; - res = _lookup(dir, name, &req->inode); + req->dentry_drop = CEPH_CAP_FILE_SHARED; + req->dentry_unless = CEPH_CAP_FILE_EXCL; + + res = _lookup(dir, name, &req->other_inode); + req->other_inode_drop = CEPH_CAP_LINK_SHARED | CEPH_CAP_LINK_EXCL; + + req->inode = dir; res = make_request(req, uid, gid); if (res == 0) { -- 2.39.5