Whamcloud - gitweb
b=23701 reduce stack pressure in ptlrpc_server_handle_request
authorAndrew Perepechko <andrew.perepechko@sun.com>
Tue, 5 Oct 2010 16:43:18 +0000 (20:43 +0400)
committerAndrew Perepechko <andrew.perepechko@sun.com>
Tue, 5 Oct 2010 16:43:18 +0000 (20:43 +0400)
i=Oleg Drokin
i=Alexander Zarochentsev
i=Johann Lombardi

lustre/ptlrpc/service.c

index 796fa3c..0d74cdf 100644 (file)
@@ -1249,6 +1249,51 @@ err_req:
         RETURN(1);
 }
 
+/*
+ * The sole purpose of these functions is to avoid unreasonable stack frame
+ * sizes such as assigned by the gcc compiler. Should NOT be inlined.
+ */
+static void noinline
+ptlrpc_server_log_handling_request(struct ptlrpc_request *request)
+{
+        CDEBUG(D_RPCTRACE, "Handling RPC pname:cluuid+ref:pid:xid:nid:opc "
+               "%s:%s+%d:%d:x"LPU64":%s:%d\n", cfs_curproc_comm(),
+               (request->rq_export ?
+                (char *)request->rq_export->exp_client_uuid.uuid : "0"),
+               (request->rq_export ?
+                atomic_read(&request->rq_export->exp_refcount) : -99),
+               lustre_msg_get_status(request->rq_reqmsg), request->rq_xid,
+               libcfs_id2str(request->rq_peer),
+               lustre_msg_get_opc(request->rq_reqmsg));
+}
+
+static void noinline
+ptlrpc_server_log_handled_request(struct ptlrpc_request *request,
+                                  long timediff,
+                                  struct timeval *work_end)
+{
+        CDEBUG(D_RPCTRACE, "Handled RPC pname:cluuid+ref:pid:xid:nid:opc "
+               "%s:%s+%d:%d:x"LPU64":%s:%d Request procesed in "
+               "%ldus (%ldus total) trans "LPU64" rc %d/%d\n",
+               cfs_curproc_comm(),
+               (request->rq_export ?
+                (char *)request->rq_export->exp_client_uuid.uuid : "0"),
+               (request->rq_export ?
+                atomic_read(&request->rq_export->exp_refcount) : -99),
+               lustre_msg_get_status(request->rq_reqmsg),
+               request->rq_xid,
+               libcfs_id2str(request->rq_peer),
+               lustre_msg_get_opc(request->rq_reqmsg),
+               timediff,
+               cfs_timeval_sub(work_end, &request->rq_arrival_time, NULL),
+               (request->rq_repmsg ?
+                lustre_msg_get_transno(request->rq_repmsg) :
+                request->rq_transno),
+               request->rq_status,
+               (request->rq_repmsg ?
+                lustre_msg_get_status(request->rq_repmsg) : -999));
+}
+
 static int
 ptlrpc_server_handle_request(struct ptlrpc_service *svc,
                              struct ptlrpc_thread *thread)
@@ -1358,15 +1403,7 @@ ptlrpc_server_handle_request(struct ptlrpc_service *svc,
                 goto put_rpc_export;
         }
 
-        CDEBUG(D_RPCTRACE, "Handling RPC pname:cluuid+ref:pid:xid:nid:opc "
-               "%s:%s+%d:%d:x"LPU64":%s:%d\n", cfs_curproc_comm(),
-               (request->rq_export ?
-                (char *)request->rq_export->exp_client_uuid.uuid : "0"),
-               (request->rq_export ?
-                atomic_read(&request->rq_export->exp_refcount) : -99),
-               lustre_msg_get_status(request->rq_reqmsg), request->rq_xid,
-               libcfs_id2str(request->rq_peer),
-               lustre_msg_get_opc(request->rq_reqmsg));
+        ptlrpc_server_log_handling_request(request);
 
         if (lustre_msg_get_opc(request->rq_reqmsg) != OBD_PING)
                 OBD_FAIL_TIMEOUT_MS(OBD_FAIL_PTLRPC_PAUSE_REQ, obd_fail_val);
@@ -1391,26 +1428,7 @@ put_conn:
         do_gettimeofday(&work_end);
         timediff = cfs_timeval_sub(&work_end, &work_start, NULL);
 
-        CDEBUG(D_RPCTRACE, "Handled RPC pname:cluuid+ref:pid:xid:nid:opc "
-               "%s:%s+%d:%d:x"LPU64":%s:%d Request procesed in "
-               "%ldus (%ldus total) trans "LPU64" rc %d/%d\n",
-               cfs_curproc_comm(),
-               (request->rq_export ?
-                (char *)request->rq_export->exp_client_uuid.uuid : "0"),
-               (request->rq_export ?
-                atomic_read(&request->rq_export->exp_refcount) : -99),
-               lustre_msg_get_status(request->rq_reqmsg),
-               request->rq_xid,
-               libcfs_id2str(request->rq_peer),
-               lustre_msg_get_opc(request->rq_reqmsg),
-               timediff,
-               cfs_timeval_sub(&work_end, &request->rq_arrival_time, NULL),
-               (request->rq_repmsg ?
-                lustre_msg_get_transno(request->rq_repmsg) :
-                request->rq_transno),
-               request->rq_status,
-               (request->rq_repmsg ? 
-                lustre_msg_get_status(request->rq_repmsg) : -999));
+        ptlrpc_server_log_handled_request(request, timediff, &work_end);
 
         if (svc->srv_stats != NULL) {
                 __u32 op = lustre_msg_get_opc(request->rq_reqmsg);