From 4eb4827f605ea3b117983db8ed04046898fe633d Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Sun, 7 Jan 2018 20:18:52 +0800 Subject: [PATCH] client: properly choose target mds for rmsnap/renamesnap Old code does not set inode or dentry for rmsnap/renamesnap requests. So rmsnap/renamesnap requests are sent to random mds. Signed-off-by: "Yan, Zheng" --- src/client/Client.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index d0e2b9b37f43..3dfb1a744537 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -12044,6 +12044,7 @@ int Client::_rmdir(Inode *dir, const char *name, const UserPerm& perms) dir->make_nosnap_relative_path(path); path.push_dentry(name); req->set_filepath(path); + req->set_inode(dir); req->dentry_drop = CEPH_CAP_FILE_SHARED; req->dentry_unless = CEPH_CAP_FILE_EXCL; @@ -12063,14 +12064,12 @@ int Client::_rmdir(Inode *dir, const char *name, const UserPerm& perms) res = _lookup(dir, name, 0, &in, perms); if (res < 0) goto fail; - if (op == CEPH_MDS_OP_RMDIR) { - req->set_inode(dir); - req->set_other_inode(in.get()); - } else { + + if (op == CEPH_MDS_OP_RMSNAP) { unlink(de, true, true); de->put(); - req->set_other_inode(in.get()); } + req->set_other_inode(in.get()); res = make_request(req, perms); @@ -12197,6 +12196,8 @@ int Client::_rename(Inode *fromdir, const char *fromname, Inode *todir, const ch // dentry manually unlink(oldde, true, true); unlink(de, true, true); + + req->set_inode(todir); } res = make_request(req, perm, &target); -- 2.47.3