/*
* send generic response (just an error code), clean up mdr
*/
-void Server::reply_request(MDRequestRef& mdr, int r, CInode *tracei, CDentry *tracedn)
+void Server::reply_request(MDRequestRef& mdr, int r)
{
- reply_request(mdr, new MClientReply(mdr->client_request, r), tracei, tracedn);
+ reply_request(mdr, new MClientReply(mdr->client_request, r));
}
void Server::early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn)
* include a trace to tracei
* Clean up mdr
*/
-void Server::reply_request(MDRequestRef& mdr, MClientReply *reply, CInode *tracei, CDentry *tracedn)
+void Server::reply_request(MDRequestRef& mdr, MClientReply *reply)
{
assert(mdr.get());
MClientRequest *req = mdr->client_request;
// get tracei/tracedn from mdr?
snapid_t snapid = mdr->snapid;
- if (!tracei)
- tracei = mdr->tracei;
- if (!tracedn)
- tracedn = mdr->tracedn;
+ CInode *tracei = mdr->tracei;
+ CDentry *tracedn = mdr->tracedn;
bool is_replay = mdr->client_request->is_replay();
bool did_early_reply = mdr->did_early_reply;
return NULL; // delayed
if (r < 0) { // error
if (r == -ENOENT && n == 0 && mdr->dn[n].size()) {
- reply_request(mdr, r, NULL, no_lookup ? NULL : mdr->dn[n][mdr->dn[n].size()-1]);
+ if (!no_lookup)
+ mdr->tracedn = mdr->dn[n][mdr->dn[n].size()-1];
+ reply_request(mdr, r);
} else if (r == -ESTALE) {
dout(10) << "FAIL on ESTALE but attempting recovery" << dendl;
MDSInternalContextBase *c = new C_MDS_TryFindInode(this, mdr);
// reply
dout(10) << "reply to stat on " << *req << dendl;
- reply_request(mdr, 0, ref,
- is_lookup ? mdr->dn[0].back() : 0);
+ mdr->tracei = ref;
+ if (is_lookup)
+ mdr->tracedn = mdr->dn[0].back();
+ reply_request(mdr, 0);
}
struct C_MDS_LookupIno2 : public ServerContext {
return;
}
dout(10) << "reply to lookup_parent " << *in << dendl;
- reply_request(mdr, 0, diri);
+ mdr->tracei = diri;
+ reply_request(mdr, 0);
} else {
if (want_dentry) {
inodeno_t dirino = req->get_filepath2().get_ino();
} else
dout(10) << "reply to lookup_ino " << *in << dendl;
- reply_request(mdr, 0, in, want_dentry ? dn : NULL);
+ mdr->tracei = in;
+ if (want_dentry)
+ mdr->tracedn = dn;
+ reply_request(mdr, 0);
}
}
dn = mdr->dn[0].back();
}
- reply_request(mdr, 0, cur, dn);
+ mdr->tracei = cur;
+ mdr->tracedn = dn;
+ reply_request(mdr, 0);
}
class C_MDS_openc_finish : public MDSInternalContext {
// it existed.
assert(req->head.args.open.flags & O_EXCL);
dout(10) << "O_EXCL, target exists, failing with -EEXIST" << dendl;
- reply_request(mdr, -EEXIST, dnl->get_inode(), dn);
+ mdr->tracei = dnl->get_inode();
+ mdr->tracedn = dn;
+ reply_request(mdr, -EEXIST);
return;
}
mds->balancer->hit_dir(ceph_clock_now(g_ceph_context), dir, META_POP_IRD, -1, numfiles);
// reply
- reply_request(mdr, reply, diri);
+ mdr->tracei = diri;
+ reply_request(mdr, reply);
}
MClientReply *reply = new MClientReply(req);
reply->set_extra_bl(dirbl);
- reply_request(mdr, reply, diri);
+ mdr->tracei = diri;
+ reply_request(mdr, reply);
}
mdr->snapid = info.snapid;
MClientReply *reply = new MClientReply(mdr->client_request, 0);
reply->snapbl = diri->snaprealm->get_snap_trace();
- reply_request(mdr, reply, diri);
+ mdr->tracei = diri;
+ reply_request(mdr, reply);
}
MDRequestRef& mdr, const char *evt);
void dispatch_client_request(MDRequestRef& mdr);
void early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn);
- void reply_request(MDRequestRef& mdr, int r = 0, CInode *tracei = 0, CDentry *tracedn = 0);
- void reply_request(MDRequestRef& mdr, MClientReply *reply, CInode *tracei = 0, CDentry *tracedn = 0);
+ void reply_request(MDRequestRef& mdr, int r = 0);
+ void reply_request(MDRequestRef& mdr, MClientReply *reply);
void set_trace_dist(Session *session, MClientReply *reply, CInode *in, CDentry *dn,
snapid_t snapid,
int num_dentries_wanted,