Whamcloud - gitweb
LU-2756 ost: buffer utilization rate of OST rqbd
[fs/lustre-release.git] / lustre / ost / ost_handler.c
index 98d6c37..873c23e 100644 (file)
@@ -107,25 +107,35 @@ static void ost_drop_id(struct obd_export *exp, struct obdo *oa)
  *    b. for CMD, seq = FID_SEQ_OST_MDT0, FID_SEQ_OST_MDT1 - FID_SEQ_OST_MAX
  */
 static int ost_validate_obdo(struct obd_export *exp, struct obdo *oa,
-                             struct obd_ioobj *ioobj)
+                            struct obd_ioobj *ioobj)
 {
-        if (oa != NULL && !(oa->o_valid & OBD_MD_FLGROUP)) {
-                oa->o_seq = FID_SEQ_OST_MDT0;
-                if (ioobj)
-                        ioobj->ioo_seq = FID_SEQ_OST_MDT0;
-        /* remove fid_seq_is_rsvd() after FID-on-OST allows SEQ > 9 */
-       } else if (oa == NULL ||
-                  !(fid_seq_is_norm(oa->o_seq) || fid_seq_is_mdt(oa->o_seq) ||
-                    fid_seq_is_echo(oa->o_seq))) {
-                CERROR("%s: client %s sent invalid object "POSTID"\n",
-                       exp->exp_obd->obd_name, obd_export_nid2str(exp),
-                       oa ? oa->o_id : -1, oa ? oa->o_seq : -1);
-                return -EPROTO;
-        }
-        obdo_from_ostid(oa, &oa->o_oi);
-        if (ioobj)
-                ioobj_from_obdo(ioobj, oa);
-        return 0;
+       if (unlikely(oa != NULL && !(oa->o_valid & OBD_MD_FLGROUP))) {
+               oa->o_seq = FID_SEQ_OST_MDT0;
+               if (ioobj)
+                       ioobj->ioo_seq = FID_SEQ_OST_MDT0;
+       } else if (unlikely(oa == NULL || !(fid_seq_is_idif(oa->o_seq) ||
+                                           fid_seq_is_mdt(oa->o_seq) ||
+                                           fid_seq_is_echo(oa->o_seq)))) {
+               CERROR("%s: client %s sent bad object "POSTID": rc = -EPROTO\n",
+                      exp->exp_obd->obd_name, obd_export_nid2str(exp),
+                      oa ? oa->o_id : -1, oa ? oa->o_seq : -1);
+               return -EPROTO;
+       }
+
+       obdo_from_ostid(oa, &oa->o_oi);
+       if (ioobj != NULL) {
+               unsigned max_brw = ioobj_max_brw_get(ioobj);
+
+               if (unlikely((max_brw & (max_brw - 1)) != 0)) {
+                       CERROR("%s: client %s sent bad ioobj max %u for "POSTID
+                              ": rc = -EPROTO\n", exp->exp_obd->obd_name,
+                              obd_export_nid2str(exp), max_brw,
+                              oa->o_id, oa->o_seq);
+                       return -EPROTO;
+               }
+               ioobj_from_obdo(ioobj, oa);
+       }
+       return 0;
 }
 
 void oti_to_request(struct obd_trans_info *oti, struct ptlrpc_request *req)
@@ -807,10 +817,10 @@ static int ost_brw_read(struct ptlrpc_request *req, struct obd_trans_info *oti)
         if (rc != 0)
                 GOTO(out_lock, rc);
 
-        desc = ptlrpc_prep_bulk_exp(req, npages,
-                                     BULK_PUT_SOURCE, OST_BULK_PORTAL);
-        if (desc == NULL)
-                GOTO(out_commitrw, rc = -ENOMEM);
+       desc = ptlrpc_prep_bulk_exp(req, npages, ioobj_max_brw_get(ioo),
+                                   BULK_PUT_SOURCE, OST_BULK_PORTAL);
+       if (desc == NULL)
+               GOTO(out_commitrw, rc = -ENOMEM);
 
         nob = 0;
         for (i = 0; i < npages; i++) {
@@ -1097,14 +1107,13 @@ static int ost_brw_write(struct ptlrpc_request *req, struct obd_trans_info *oti)
         if (rc != 0)
                 GOTO(out_lock, rc);
 
-        desc = ptlrpc_prep_bulk_exp(req, npages,
-                                     BULK_GET_SINK, OST_BULK_PORTAL);
-        if (desc == NULL)
-                GOTO(skip_transfer, rc = -ENOMEM);
-
-        /* NB Having prepped, we must commit... */
+       desc = ptlrpc_prep_bulk_exp(req, npages, ioobj_max_brw_get(ioo),
+                                   BULK_GET_SINK, OST_BULK_PORTAL);
+       if (desc == NULL)
+               GOTO(skip_transfer, rc = -ENOMEM);
 
-        for (i = 0; i < npages; i++)
+       /* NB Having prepped, we must commit... */
+       for (i = 0; i < npages; i++)
                ptlrpc_prep_bulk_page_nopin(desc, local_nb[i].page,
                                            local_nb[i].lnb_page_offset,
                                            local_nb[i].len);
@@ -1946,7 +1955,7 @@ static int ost_rw_hpreq_check(struct ptlrpc_request *req)
         CDEBUG(D_DLMTRACE, "%s: refreshed %u locks timeout for req %p.\n",
                obd->obd_name, opd.opd_locks, req);
 
-        RETURN(opd.opd_locks);
+        RETURN(opd.opd_locks > 0);
 }
 
 static void ost_rw_hpreq_fini(struct ptlrpc_request *req)
@@ -2602,9 +2611,9 @@ static int ost_setup(struct obd_device *obd, struct lustre_cfg* lcfg)
                .psc_watchdog_factor    = OSS_SERVICE_WATCHDOG_FACTOR,
                .psc_buf                = {
                        .bc_nbufs               = OST_NBUFS,
-                       .bc_buf_size            = OST_BUFSIZE,
-                       .bc_req_max_size        = OST_MAXREQSIZE,
-                       .bc_rep_max_size        = OST_MAXREPSIZE,
+                       .bc_buf_size            = OST_IO_BUFSIZE,
+                       .bc_req_max_size        = OST_IO_MAXREQSIZE,
+                       .bc_rep_max_size        = OST_IO_MAXREPSIZE,
                        .bc_req_portal          = OST_IO_PORTAL,
                        .bc_rep_portal          = OSC_REPLY_PORTAL,
                },