From 3fd195e6de32c757ba1f6ea60bc867e8f3784a03 Mon Sep 17 00:00:00 2001 From: Andrew Perepechko Date: Tue, 5 Oct 2010 20:43:18 +0400 Subject: [PATCH] b=23701 reduce stack pressure in ptlrpc_server_handle_request i=Oleg Drokin i=Alexander Zarochentsev i=Johann Lombardi --- lustre/ptlrpc/service.c | 76 ++++++++++++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 29 deletions(-) diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c index 796fa3c..0d74cdf 100644 --- a/lustre/ptlrpc/service.c +++ b/lustre/ptlrpc/service.c @@ -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); -- 1.8.3.1