From aea22fa1b55e3e8830c8d46f2d7e4731f1b58fcf Mon Sep 17 00:00:00 2001 From: Gui Hecheng Date: Thu, 5 Sep 2013 10:38:57 +0800 Subject: [PATCH] btrfs-progs: free the local list pending_list in btrfs_scan_one_dir Originally the local pending_list is not guaranteed to be freed upon fails, it should be emptyed and the elements should be freed. Signed-off-by: Gui Hecheng Signed-off-by: David Sterba Signed-off-by: Chris Mason --- utils.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/utils.c b/utils.c index d022d58a..134bf808 100644 --- a/utils.c +++ b/utils.c @@ -1066,8 +1066,8 @@ again: dirp = opendir(dirname); if (!dirp) { fprintf(stderr, "Unable to open %s for scanning\n", dirname); - free(fullpath); - return -ENOENT; + ret = -ENOENT; + goto fail; } while(1) { dirent = readdir(dirp); @@ -1133,6 +1133,12 @@ again: fail: free(pending); free(fullpath); + while (!list_empty(&pending_list)) { + pending = list_entry(pending_list.next, struct pending_dir, + list); + list_del(&pending->list); + free(pending); + } if (dirp) closedir(dirp); return ret;