summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-05-17 14:03:15 -0700
committerSage Weil <sage@inktank.com>2013-06-24 21:21:47 -0700
commitdff24952cfb983ae6f5e13484fb240eeed67f469 (patch)
tree7a29010055928de0eb6f588819a2d92121d1f103
parent339cafc359f6e02f01bde2df216bbde6f48089ff (diff)
downloadceph-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.cc9
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;