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>
This commit is contained in:
Sage Weil 2013-05-17 14:03:15 -07:00 committed by Yan, Zheng
parent 627e644c35
commit 8f3409d1d2

View 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;