Whamcloud - gitweb
LU-14124 target: set OBD_MD_FLGRANT in read's reply
[fs/lustre-release.git] / lustre / target / tgt_handler.c
index 882591e..1a903db 100644 (file)
@@ -265,6 +265,9 @@ static int tgt_ost_body_unpack(struct tgt_session_info *tsi, __u32 flags)
        body->oa.o_gid = nodemap_map_id(nodemap, NODEMAP_GID,
                                        NODEMAP_CLIENT_TO_FS,
                                        body->oa.o_gid);
+       body->oa.o_projid = nodemap_map_id(nodemap, NODEMAP_PROJID,
+                                          NODEMAP_CLIENT_TO_FS,
+                                          body->oa.o_projid);
        nodemap_putref(nodemap);
 
        tsi->tsi_ost_body = body;
@@ -2419,6 +2422,8 @@ int tgt_brw_read(struct tgt_session_info *tsi)
        } else {
                repbody->oa.o_valid = 0;
        }
+       if (body->oa.o_valid & OBD_MD_FLGRANT)
+               repbody->oa.o_valid |= OBD_MD_FLGRANT;
        /* We're finishing using body->oa as an input variable */
 
        /* Check if client was evicted while we were doing i/o before touching
@@ -2481,9 +2486,22 @@ out_lock:
         * to reorder. */
        if (unlikely(CFS_FAIL_PRECHECK(OBD_FAIL_PTLRPC_CLIENT_BULK_CB2)) &&
            desc) {
+               /* Calculate checksum before request transfer, original
+                * it is done by target_bulk_io() */
+               rc = sptlrpc_svc_wrap_bulk(req, desc);
+               if (OCD_HAS_FLAG(&exp->exp_connect_data, BULK_MBITS))
+                       req->rq_mbits = lustre_msg_get_mbits(req->rq_reqmsg);
+               else /* old version, bulk matchbits is rq_xid */
+                       req->rq_mbits = req->rq_xid;
+
+               req->rq_status = rc;
+               target_committed_to_req(req);
+               target_send_reply(req, 0, 0);
+
                CDEBUG(D_INFO, "reorder BULK\n");
+               OBD_FAIL_TIMEOUT(OBD_FAIL_PTLRPC_CLIENT_BULK_CB2,
+                                cfs_fail_val ? : 3);
 
-               ssleep(3);
                target_bulk_io(exp, desc);
                ptlrpc_free_bulk(desc);
        }