]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: unlink dentry on traceless rmdir, unlink reply
authorSage Weil <sage@inktank.com>
Fri, 17 May 2013 21:03:15 +0000 (14:03 -0700)
committerYan, Zheng <zheng.z.yan@intel.com>
Thu, 8 May 2014 02:58:55 +0000 (10:58 +0800)
This used to be handled in _unlink() and _rmdir() even when a trace was
present in the reply, but this is cleaner.

Signed-off-by: Sage Weil <sage@inktank.com>
src/client/Client.cc

index 535752ad33d7de9ddd70eafb87f04e0e6154c32f..38b5d053084b98aaca35eeeb1ba3dcc370e1670b 100644 (file)
@@ -1006,14 +1006,17 @@ Inode* Client::insert_trace(MetaRequest *request, MetaSession *session)
     }
 
     if (d && reply->get_result() == 0) {
-      Dentry *od = request->old_dentry();
-      if (od) {
+      if (request->head.op == CEPH_MDS_OP_RENAME) {
        // rename
+       Dentry *od = request->old_dentry();
+       ldout(cct, 10) << " unlinking rename src dn " << od << " for traceless reply" << dendl;
+       assert(od);
        unlink(od, false, false);
       } else if (request->head.op == CEPH_MDS_OP_RMDIR ||
                 request->head.op == CEPH_MDS_OP_UNLINK) {
        // unlink, rmdir
-       // ...
+       ldout(cct, 10) << " unlinking unlink/rmdir dn " << d << " for traceless reply" << dendl;
+       unlink(d, true, true);
       }
     }
     return NULL;