From b5cbe49a16b68ad60a8e7293d1b5450e0f97a430 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. Lustre-change: https://review.whamcloud.com/34591 Lustre-commit: 187117fd94e4904c168de02fc439b41a1fcc3e48 Cray-bug-id: LUS-7240 Test-Parameters: trivial Signed-off-by: Chris Horn Change-Id: I8c0dc7bab7ca42dbce04a9e6efa4343da4139239 Reviewed-by: James Simmons Reviewed-by: Alexey Lyashkov Signed-off-by: Minh Diep Reviewed-on: https://review.whamcloud.com/34922 Tested-by: Jenkins 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 c66f5a5..d48ce40 100644 --- a/lnet/lnet/router.c +++ b/lnet/lnet/router.c @@ -574,29 +574,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