Whamcloud - gitweb
LU-12152 lnet: Cleanup lnet_get_rtr_pool_cfg 22/34922/2
authorChris Horn <hornc@cray.com>
Thu, 4 Apr 2019 02:40:58 +0000 (21:40 -0500)
committerOleg Drokin <green@whamcloud.com>
Sat, 8 Jun 2019 02:36:49 +0000 (02:36 +0000)
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 <hornc@cray.com>
Change-Id: I8c0dc7bab7ca42dbce04a9e6efa4343da4139239
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Alexey Lyashkov <c17817@cray.com>
Signed-off-by: Minh Diep <mdiep@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/34922
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/lnet/router.c

index c66f5a5..d48ce40 100644 (file)
@@ -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);