Whamcloud - gitweb
LU-18167 nodemap: Fix return value of range_search/find 37/56137/4
authorChris Horn <chris.horn@hpe.com>
Fri, 23 Aug 2024 17:40:17 +0000 (11:40 -0600)
committerOleg Drokin <green@whamcloud.com>
Fri, 30 Aug 2024 05:58:08 +0000 (05:58 +0000)
The 'range = NULL' assignments in range_search() and range_find() are
no-ops because the list_for_each_entry_safe macro will set range to
some non-NULL value before the loop exits. Thus, range_search() and
range_find() can return a non-NULL value even when it doesn't match
the NID we are searching for.

Modify the loops to return range immediately upon finding a match.

Test-Parameters: trivial
Test-Parameters: testlist=sanity-sec env=ONLY=16,LOAD_MODULES_REMOTE=true,FORCE_LARGE_NID=true
Fixes: 0ea23e0194 ("LU-13307 nodemap: have nodemap_add_member support large NIDs")
Signed-off-by: Chris Horn <chris.horn@hpe.com>
Change-Id: Id00a2b73da127afaf94d1ecf5d1ef0080d11c6fd
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/56137
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Sebastien Buisson <sbuisson@ddn.com>
lustre/ptlrpc/nodemap_range.c

index 35ed82f..f71130b 100644 (file)
@@ -137,7 +137,11 @@ struct lu_nid_range *range_find(struct nodemap_config *config,
                       (!nid_same(&range->rn_start, start_nid) ||
                        !nid_same(&range->rn_end, end_nid)))
                        range = nm_range_iter_next(range, nid4[0], nid4[1]);
-       } else if (!list_empty(&config->nmc_netmask_setup)) {
+
+               return range;
+       }
+
+       if (!list_empty(&config->nmc_netmask_setup)) {
                struct lu_nid_range *range_temp;
 
                /* FIXME. We scan the config for large NIDs. Each range
@@ -148,11 +152,11 @@ struct lu_nid_range *range_find(struct nodemap_config *config,
                                         rn_collect) {
                        if (nid_same(&range->rn_start, start_nid) &&
                            range->rn_netmask == netmask)
-                               break;
-                       range = NULL;
+                               return range;
                }
        }
-       return range;
+
+       return NULL;
 }
 
 /*
@@ -223,17 +227,15 @@ void range_delete(struct nodemap_config *config, struct lu_nid_range *range)
 struct lu_nid_range *range_search(struct nodemap_config *config,
                                  struct lnet_nid *nid)
 {
-       struct lu_nid_range *range = NULL;
-
        if (nid_is_nid4(nid)) {
                struct nodemap_range_tree *nm_range_tree;
 
                nm_range_tree = &config->nmc_range_tree;
-               range = nm_range_iter_first(&nm_range_tree->nmrt_range_interval_root,
-                                           lnet_nid_to_nid4(nid),
-                                           lnet_nid_to_nid4(nid));
+               return nm_range_iter_first(&nm_range_tree->nmrt_range_interval_root,
+                                          lnet_nid_to_nid4(nid),
+                                          lnet_nid_to_nid4(nid));
        } else if (!list_empty(&config->nmc_netmask_setup)) {
-               struct lu_nid_range *range_temp;
+               struct lu_nid_range *range, *range_temp;
 
                /* FIXME. We scan the config for the large NIDs. Each range
                 * only contains one large NID for now.
@@ -242,10 +244,9 @@ struct lu_nid_range *range_search(struct nodemap_config *config,
                                         &config->nmc_netmask_setup,
                                         rn_collect) {
                        if (nid_same(&range->rn_start, nid))
-                               break;
-                       range = NULL;
+                               return range;
                }
        }
 
-       return range;
+       return NULL;
 }