diff options
author | Sage Weil <sage@inktank.com> | 2013-05-17 14:03:15 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-06-24 21:21:47 -0700 |
commit | dff24952cfb983ae6f5e13484fb240eeed67f469 (patch) | |
tree | 7a29010055928de0eb6f588819a2d92121d1f103 | |
parent | 339cafc359f6e02f01bde2df216bbde6f48089ff (diff) | |
download | ceph-dff24952cfb983ae6f5e13484fb240eeed67f469.tar.gz |
client: unlink dentry on traceless rmdir, unlink reply
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>
-rw-r--r-- | src/client/Client.cc | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/client/Client.cc b/src/client/Client.cc index 09d3a95850e..205511b7043 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -928,14 +928,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; |