From 187117fd94e4904c168de02fc439b41a1fcc3e48 Mon Sep 17 00:00:00 2001 From: Chris Horn Date: Wed, 3 Apr 2019 21:40:58 -0500 Subject: [PATCH] LU-12152 lnet: Cleanup lnet_get_rtr_pool_cfg The cfs_percpt_for_each loop contains an off-by-one error that causes memory corruption. In addition, the way these loops are nested results in unnecessary iterations. We only need to iterate through the cpts until we match the cpt number passed as an argument. At that point we want to copy the router buffer pools for that cpt. Cray-bug-id: LUS-7240 Test-Parameters: trivial Signed-off-by: Chris Horn Change-Id: I8c0dc7bab7ca42dbce04a9e6efa4343da4139239 Reviewed-on: https://review.whamcloud.com/34591 Reviewed-by: James Simmons Tested-by: Jenkins Reviewed-by: Alexey Lyashkov Tested-by: Maloo Reviewed-by: Oleg Drokin --- lnet/lnet/router.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/lnet/lnet/router.c b/lnet/lnet/router.c index ddc9261..4b41feb 100644 --- a/lnet/lnet/router.c +++ b/lnet/lnet/router.c @@ -566,29 +566,29 @@ lnet_destroy_routes (void) lnet_del_route(LNET_NIDNET(LNET_NID_ANY), LNET_NID_ANY); } -int lnet_get_rtr_pool_cfg(int idx, struct lnet_ioctl_pool_cfg *pool_cfg) +int lnet_get_rtr_pool_cfg(int cpt, struct lnet_ioctl_pool_cfg *pool_cfg) { + struct lnet_rtrbufpool *rbp; int i, rc = -ENOENT, j; if (the_lnet.ln_rtrpools == NULL) return rc; - for (i = 0; i < LNET_NRBPOOLS; i++) { - struct lnet_rtrbufpool *rbp; - lnet_net_lock(LNET_LOCK_EX); - cfs_percpt_for_each(rbp, j, the_lnet.ln_rtrpools) { - if (i++ != idx) - continue; + cfs_percpt_for_each(rbp, i, the_lnet.ln_rtrpools) { + if (i != cpt) + continue; - pool_cfg->pl_pools[i].pl_npages = rbp[i].rbp_npages; - pool_cfg->pl_pools[i].pl_nbuffers = rbp[i].rbp_nbuffers; - pool_cfg->pl_pools[i].pl_credits = rbp[i].rbp_credits; - pool_cfg->pl_pools[i].pl_mincredits = rbp[i].rbp_mincredits; - rc = 0; - break; + lnet_net_lock(i); + for (j = 0; j < LNET_NRBPOOLS; j++) { + pool_cfg->pl_pools[j].pl_npages = rbp[j].rbp_npages; + pool_cfg->pl_pools[j].pl_nbuffers = rbp[j].rbp_nbuffers; + pool_cfg->pl_pools[j].pl_credits = rbp[j].rbp_credits; + pool_cfg->pl_pools[j].pl_mincredits = rbp[j].rbp_mincredits; } - lnet_net_unlock(LNET_LOCK_EX); + lnet_net_unlock(i); + rc = 0; + break; } lnet_net_lock(LNET_LOCK_EX); -- 1.8.3.1