Whamcloud - gitweb
b=23216 fixes for memory leaks in ost_brw_read and ost_brw_write
authorAndrew Perepechko <Andrew.Perepechko@sun.com>
Tue, 31 Aug 2010 12:43:59 +0000 (16:43 +0400)
committerMikhail Pershin <tappro@sun.com>
Tue, 7 Sep 2010 20:59:54 +0000 (00:59 +0400)
based on attachments 30714 and 30726

i=Oleg Drokin
i=Alexander Zarochentsev

lustre/ost/ost_handler.c

index 69157b1..e139194 100644 (file)
@@ -823,7 +823,7 @@ static int ost_brw_read(struct ptlrpc_request *req, struct obd_trans_info *oti)
         desc = ptlrpc_prep_bulk_exp(req, npages,
                                      BULK_PUT_SOURCE, OST_BULK_PORTAL);
         if (desc == NULL)
-                GOTO(out_lock, rc = -ENOMEM);
+                GOTO(out_commitrw, rc = -ENOMEM);
 
         if (!lustre_handle_is_used(&lockh))
                 /* no needs to try to prolong lock if server is asked
@@ -946,6 +946,7 @@ static int ost_brw_read(struct ptlrpc_request *req, struct obd_trans_info *oti)
                 no_reply = rc != 0;
         }
 
+out_commitrw:
         /* Must commit after prep above in all cases */
         rc = obd_commitrw(OBD_BRW_READ, exp, &body->oa, 1, ioo,
                           remote_nb, npages, local_nb, oti, rc);
@@ -1139,7 +1140,7 @@ static int ost_brw_write(struct ptlrpc_request *req, struct obd_trans_info *oti)
         desc = ptlrpc_prep_bulk_exp(req, npages,
                                      BULK_GET_SINK, OST_BULK_PORTAL);
         if (desc == NULL)
-                GOTO(out_lock, rc = -ENOMEM);
+                GOTO(skip_transfer, rc = -ENOMEM);
 
         /* NB Having prepped, we must commit... */
 
@@ -1206,6 +1207,7 @@ static int ost_brw_write(struct ptlrpc_request *req, struct obd_trans_info *oti)
         }
         no_reply = rc != 0;
 
+skip_transfer:
         repbody = req_capsule_server_get(&req->rq_pill, &RMF_OST_BODY);
         memcpy(&repbody->oa, &body->oa, sizeof(repbody->oa));