From: Wang Shilong Date: Wed, 18 Mar 2020 07:51:17 +0000 (+0800) Subject: LU-13365 ldlm: check slv and limit before updating X-Git-Tag: 2.13.55~87 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=3116b9e19dc09a4a8b73c2c4733df5fe4596e041 LU-13365 ldlm: check slv and limit before updating slv and limit do not change for most of time, ldlm_cli_update_pool() could be called for each RPC reply, try hold read lock to check firstly could avoid heavy write lock in hot path. Change-Id: I4ef33132a463b3bac23863c09a2652f2d2782aae Signed-off-by: Wang Shilong Reviewed-on: https://review.whamcloud.com/37969 Reviewed-by: Andreas Dilger Reviewed-by: Mike Pershin Tested-by: jenkins Tested-by: Maloo --- diff --git a/lustre/ldlm/ldlm_request.c b/lustre/ldlm/ldlm_request.c index 42225f9..4458ebc 100644 --- a/lustre/ldlm/ldlm_request.c +++ b/lustre/ldlm/ldlm_request.c @@ -1449,6 +1449,14 @@ int ldlm_cli_update_pool(struct ptlrpc_request *req) new_slv = lustre_msg_get_slv(req->rq_repmsg); obd = req->rq_import->imp_obd; + read_lock(&obd->obd_pool_lock); + if (obd->obd_pool_slv == new_slv && + obd->obd_pool_limit == new_limit) { + read_unlock(&obd->obd_pool_lock); + RETURN(0); + } + read_unlock(&obd->obd_pool_lock); + /* * Set new SLV and limit in OBD fields to make them accessible * to the pool thread. We do not access obd_namespace and pool