]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: properly choose target mds for rmsnap/renamesnap 19825/head
authorYan, Zheng <zyan@redhat.com>
Sun, 7 Jan 2018 12:18:52 +0000 (20:18 +0800)
committerYan, Zheng <zyan@redhat.com>
Tue, 30 Jan 2018 08:26:28 +0000 (16:26 +0800)
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" <zyan@redhat.com>
src/client/Client.cc

index d0e2b9b37f438d13009a83f7652fc1375ad2a526..3dfb1a744537d887c3c39f50cbf067fd6cb124da 100644 (file)
@@ -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);