Replace this while loop with a for loop and simplify error handling. Indent is broken on purpose, fixed in next commit.
Signed-off-by: David Marchand <david.marchand at 6wind.com> --- lib/librte_eal/linuxapp/eal/eal_hugepage_info.c | 28 ++++++++++++----------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c b/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c index b474159..de3f48d 100644 --- a/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c +++ b/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c @@ -282,12 +282,13 @@ eal_hugepage_info_init(void) rte_panic("Cannot open directory %s to read system hugepage " "info\n", sys_dir_path); - dirent = readdir(dir); - while (dirent != NULL) { + for (dirent = readdir(dir); dirent != NULL; dirent = readdir(dir)) { struct hugepage_info *hpi; if (strncmp(dirent->d_name, dirent_start_text, - dirent_start_len) == 0) { + dirent_start_len) != 0) + continue; + hpi = &internal_config.hugepage_info[num_sizes]; hpi->hugepage_sz = rte_str_to_size(&dirent->d_name[dirent_start_len]); hpi->hugedir = get_hugepage_dir(hpi->hugepage_sz); @@ -301,21 +302,20 @@ eal_hugepage_info_init(void) RTE_LOG(INFO, EAL, "%lu hugepages of size %lu reserved, " "but no mounted hugetlbfs found for that size\n", num_pages, hpi->hugepage_sz); - } else { + continue; + } + /* try to obtain a writelock */ hpi->lock_descriptor = open(hpi->hugedir, O_RDONLY); /* if blocking lock failed */ if (flock(hpi->lock_descriptor, LOCK_EX) == -1) { RTE_LOG(CRIT, EAL, "Failed to lock hugepage directory!\n"); - closedir(dir); - return -1; + break; } /* clear out the hugepages dir from unused pages */ - if (clear_hugedir(hpi->hugedir) == -1) { - closedir(dir); - return -1; - } + if (clear_hugedir(hpi->hugedir) == -1) + break; /* for now, put all pages into socket 0, * later they will be sorted */ @@ -328,11 +328,13 @@ eal_hugepage_info_init(void) #endif num_sizes++; - } - } - dirent = readdir(dir); } closedir(dir); + + /* something went wrong, and we broke from the for loop above */ + if (dirent != NULL) + return -1; + internal_config.num_hugepage_sizes = num_sizes; /* sort the page directory entries by size, largest to smallest */ -- 1.7.10.4