If ioctl of defrag range is unsupported, defrag will exit immediately.

Since caller can handle the error, let cmd_filesystem_defrag()
close file, break the loop and return error instead of calling exit(1).

Suggested-by: David Sterba <dste...@suse.com>
Signed-off-by: Su Yue <suy.f...@cn.fujitsu.com>
---
Changelog:
v2:     Separate the patch from commit 6e991b9161fa ("btrfs-progs: fi
        defrag: clean up duplicate code if find errors").
v3:     Call close_file_or_dir() before breaking the loop.
---
 cmds-filesystem.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/cmds-filesystem.c b/cmds-filesystem.c
index 17d399d58adf..232d4e88e0c0 100644
--- a/cmds-filesystem.c
+++ b/cmds-filesystem.c
@@ -1049,8 +1049,10 @@ static int cmd_filesystem_defrag(int argc, char **argv)
                if (recursive && S_ISDIR(st.st_mode)) {
                        ret = nftw(argv[i], defrag_callback, 10,
                                                FTW_MOUNT | FTW_PHYS);
-                       if (ret == ENOTTY)
-                               exit(1);
+                       if (ret == ENOTTY) {
+                               close_file_or_dir(fd, dirstream);
+                               break;
+                       }
                        /* errors are handled in the callback */
                        ret = 0;
                } else {
-- 
2.15.0



--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to