From 468c7759dd73594065dc029eeb73c514d589db3a Mon Sep 17 00:00:00 2001 From: Oleg Drokin Date: Sat, 9 Mar 2013 18:44:36 -0500 Subject: [PATCH] LU-2936 ptlrpc: Do not try to fetch hp request blindly ptlrpc_svcpt_health_check tries to blindly fetch a hp requet from any service it happens to be called on, but some services don't have any hp policies registered resulting in an underlyign assertion in nrs_svcpt2nrs. Make sure there are in fact pending hp requests on a service before attempting to fetch them. Change-Id: Ia38dcce758db948a1e4c187d009da4a8d5f2cbc6 Signed-off-by: Oleg Drokin Reviewed-on: http://review.whamcloud.com/5665 Tested-by: Hudson Reviewed-by: Nikitas Angelinas Tested-by: Maloo Reviewed-by: Liang Zhen --- lustre/ptlrpc/service.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c index 2f0f3a5..6278f7b 100644 --- a/lustre/ptlrpc/service.c +++ b/lustre/ptlrpc/service.c @@ -3158,23 +3158,24 @@ EXPORT_SYMBOL(ptlrpc_unregister_service); * to be shot, so it's intentionally non-aggressive. */ int ptlrpc_svcpt_health_check(struct ptlrpc_service_part *svcpt) { - struct ptlrpc_request *request; + struct ptlrpc_request *request = NULL; struct timeval right_now; long timediff; cfs_gettimeofday(&right_now); spin_lock(&svcpt->scp_req_lock); - if (!ptlrpc_server_request_pending(svcpt, 1)) { + /* How long has the next entry been waiting? */ + if (ptlrpc_server_high_pending(svcpt, 1)) + request = ptlrpc_nrs_req_poll_nolock(svcpt, true); + else if (ptlrpc_server_normal_pending(svcpt, 1)) + request = ptlrpc_nrs_req_poll_nolock(svcpt, false); + + if (request == NULL) { spin_unlock(&svcpt->scp_req_lock); return 0; } - /* How long has the next entry been waiting? */ - request = ptlrpc_nrs_req_poll_nolock(svcpt, true); - if (request == NULL) - request = ptlrpc_nrs_req_poll_nolock(svcpt, false); - timediff = cfs_timeval_sub(&right_now, &request->rq_arrival_time, NULL); spin_unlock(&svcpt->scp_req_lock); -- 1.8.3.1