+
+ /* update lcd in memory only for resent cases */
+ ted = &req->rq_export->exp_target_data;
+ LASSERT(ted);
+ cfs_mutex_down(&ted->ted_lcd_lock);
+ lcd = ted->ted_lcd;
+ if (lustre_msg_get_opc(req->rq_reqmsg) == MDS_CLOSE ||
+ lustre_msg_get_opc(req->rq_reqmsg) == MDS_DONE_WRITING) {
+ if (info->mti_transno != 0)
+ lcd->lcd_last_close_transno = info->mti_transno;
+ lcd->lcd_last_close_xid = req->rq_xid;
+ lcd->lcd_last_close_result = rc;
+ } else {
+ /* VBR: save versions in last_rcvd for reconstruct. */
+ __u64 *pre_versions = lustre_msg_get_versions(req->rq_repmsg);
+ if (pre_versions) {
+ lcd->lcd_pre_versions[0] = pre_versions[0];
+ lcd->lcd_pre_versions[1] = pre_versions[1];
+ lcd->lcd_pre_versions[2] = pre_versions[2];
+ lcd->lcd_pre_versions[3] = pre_versions[3];
+ }
+ if (info->mti_transno != 0)
+ lcd->lcd_last_transno = info->mti_transno;
+ lcd->lcd_last_xid = req->rq_xid;
+ lcd->lcd_last_result = rc;
+ lcd->lcd_last_data = info->mti_opdata;
+ }
+ cfs_mutex_up(&ted->ted_lcd_lock);
+