int mdc_done_writing(struct obd_export *exp, struct md_op_data *op_data,
struct obd_client_handle *och)
{
+ struct obd_device *obd = class_exp2obd(exp);
struct ptlrpc_request *req;
int size[4] = { sizeof(struct ptlrpc_body),
sizeof(struct mdt_epoch),
mdc_close_pack(req, REQ_REC_OFF, op_data);
ptlrpc_req_set_repsize(req, 2, repsize);
+ mdc_get_rpc_lock(obd->u.cli.cl_close_lock, NULL);
rc = ptlrpc_queue_wait(req);
+ mdc_put_rpc_lock(obd->u.cli.cl_close_lock, NULL);
ptlrpc_req_finished(req);
RETURN(rc);
}
off = med->med_lr_off;
mutex_down(&med->med_mcd_lock);
- if (lustre_msg_get_opc(req->rq_reqmsg) == MDS_CLOSE) {
+ if (lustre_msg_get_opc(req->rq_reqmsg) == MDS_CLOSE ||
+ lustre_msg_get_opc(req->rq_reqmsg) == MDS_DONE_WRITING) {
mcd->mcd_last_close_transno = mti->mti_transno;
mcd->mcd_last_close_xid = req->rq_xid;
mcd->mcd_last_close_result = rc;