From 8f3409d1d249b9dc27eb80a16764a2280fb9ad4f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 17 May 2013 14:03:15 -0700 Subject: [PATCH] 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 --- src/client/Client.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 535752ad33d..38b5d053084 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -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;