Whamcloud - gitweb
b=21804 make sure the request is protected by rq_refcount while
authorJohann Lombardi <johann@sun.com>
Thu, 25 Nov 2010 17:36:38 +0000 (18:36 +0100)
committerJohann Lombardi <johann.lombardi@oracle.com>
Thu, 25 Nov 2010 17:36:38 +0000 (18:36 +0100)
i=vitaly
i=oleg

lustre/ChangeLog
lustre/ptlrpc/service.c

index d57abf0..0119750 100644 (file)
@@ -13,6 +13,12 @@ xxxx-xx-xx Oracle, Inc.
          lock before replay feature (bug 16774) are disabled by default.
 
 Severity   : normal
+Bugzilla   : 21804
+Description: release request ref through ptlrpc_server_drop_request()
+Details    : make sure the request is protected by rq_refcount while
+             being processed in ptlrpc_server_handle_req_in().
+
+Severity   : normal
 Bugzilla   : 23820
 Description: Handle unsent requests with rq_net_err in ptlrpc_check_set()
 
index 566da11..0bd922f 100644 (file)
@@ -1168,6 +1168,7 @@ ptlrpc_server_handle_req_in(struct ptlrpc_service *svc)
         list_del_init (&req->rq_list);
         /* Consider this still a "queued" request as far as stats are
            concerned */
+        ptlrpc_request_addref(req);
         spin_unlock(&svc->srv_lock);
 
         /* Clear request swab mask; this is a new request */
@@ -1237,9 +1238,13 @@ ptlrpc_server_handle_req_in(struct ptlrpc_service *svc)
         if (rc)
                 GOTO(err_req, rc);
         cfs_waitq_signal(&svc->srv_waitq);
+        /** drop request refcount */
+        ptlrpc_server_drop_request(req);
         RETURN(1);
 
 err_req:
+        /** drop request refcount */
+        ptlrpc_server_drop_request(req);
         spin_lock(&svc->srv_lock);
         svc->srv_n_queued_reqs--;
         svc->srv_n_active_reqs++;