From 220124bff7b13cd26b1b7b81ecf46e137ac174d3 Mon Sep 17 00:00:00 2001 From: Bruno Faccini Date: Thu, 20 Apr 2017 12:10:28 +0200 Subject: [PATCH] LU-9372 ptlrpc: drain "ptlrpc_request_buffer_desc" objects Prior to this patch, new "ptlrpc_request_buffer_desc" could be additionally allocated upon need by ptlrpc_check_rqbd_pool(), but will never be freed until OST umount/stop by ptlrpc_service_purge_all(). Now try to release some of them when possible. Signed-off-by: Bruno Faccini Change-Id: Ieb72bab202e3f3d957cd2e6ce06bb56c4e21b1bd Reviewed-on: https://review.whamcloud.com/26752 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Niu Yawei Reviewed-by: Henri Doreau Reviewed-by: Oleg Drokin --- lustre/ptlrpc/service.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c index 7006a57..f7e08f4 100644 --- a/lustre/ptlrpc/service.c +++ b/lustre/ptlrpc/service.c @@ -939,10 +939,22 @@ void ptlrpc_server_drop_request(struct ptlrpc_request *req) spin_lock(&svcpt->scp_lock); /* * now all reqs including the embedded req has been - * disposed, schedule request buffer for re-use. + * disposed, schedule request buffer for re-use + * or free it to drain some in excess. */ LASSERT(atomic_read(&rqbd->rqbd_req.rq_refcount) == 0); - list_add_tail(&rqbd->rqbd_list, &svcpt->scp_rqbd_idle); + if (svcpt->scp_nrqbds_posted >= + svc->srv_nbuf_per_group && + !test_req_buffer_pressure) { + /* like in ptlrpc_free_rqbd() */ + svcpt->scp_nrqbds_total--; + OBD_FREE_LARGE(rqbd->rqbd_buffer, + svc->srv_buf_size); + OBD_FREE_PTR(rqbd); + } else { + list_add_tail(&rqbd->rqbd_list, + &svcpt->scp_rqbd_idle); + } } spin_unlock(&svcpt->scp_lock); -- 1.8.3.1