logger->tinc(l_c_lat, lat);
logger->tinc(l_c_reply, lat);
- if (request->inode())
- put_inode(request->take_inode());
- if (request->old_inode())
- put_inode(request->take_old_inode());
- if (request->other_inode())
- put_inode(request->take_other_inode());
-
- request->put();
+ put_request(request);
reply->put();
return r;
}
+void Client::put_request(MetaRequest *request)
+{
+ if (request->get_num_ref() == 1) {
+ if (request->inode())
+ put_inode(request->take_inode());
+ if (request->old_inode())
+ put_inode(request->take_old_inode());
+ if (request->other_inode())
+ put_inode(request->take_other_inode());
+ }
+ request->_put();
+}
+
int Client::encode_inode_release(Inode *in, MetaRequest *req,
int mds, int drop,
int unless, int force)
}
request->item.remove_myself();
mds_requests.erase(tid);
- request->put(); // for the dumb data structure
+ put_request(request);
}
if (unmounting)
mount_cond.Signal();
m->put();
}
-
void Client::put_inode(Inode *in, int n)
{
ldout(cct, 10) << "put_inode on " << *in << dendl;
if ((unsigned long)attr->st_size < mdsmap->get_max_filesize())
req->head.args.setattr.size = attr->st_size;
else { //too big!
- delete req;
+ put_request(req);
return -EFBIG;
}
req->inode_drop |= CEPH_CAP_AUTH_SHARED | CEPH_CAP_FILE_RD |
return res;
fail:
- delete req;
+ put_request(req);
return res;
}
return res;
fail:
- delete req;
+ put_request(req);
return res;
}
return res;
fail:
- delete req;
+ put_request(req);
return res;
}
fail:
- delete req;
+ put_request(req);
return res;
}
return res;
fail:
- delete req;
+ put_request(req);
return res;
}
return res;
fail:
- delete req;
+ put_request(req);
return res;
}
return res;
fail:
- delete req;
+ put_request(req);
return res;
}
return res;
fail:
- delete req;
+ put_request(req);
return res;
}
//MClientRequest *req, int uid, int gid,
Inode **ptarget = 0, bool *pcreated = 0,
int use_mds=-1, bufferlist *pdirbl=0);
+ void put_request(MetaRequest *request);
+
int verify_reply_trace(int r, MetaRequest *request, MClientReply *reply,
Inode **ptarget, bool *pcreated, int uid, int gid);
void encode_cap_releases(MetaRequest *request, int mds);