From 89867394e5e0ea931696a986cf4e0e45a1442edb Mon Sep 17 00:00:00 2001 From: Goffredo Baroncelli Date: Thu, 8 Feb 2024 21:19:26 +0100 Subject: btrfs-progs: remove open_file_or_dir3 from du_add_file For historical reasons the helpers [btrfs_]open_dir... return also the 'DIR *dirstream' value when a directory is opened. However this is never used. So avoid calling diropen() and return only the fd. Replace the last reference to btrfs_open_file_or_dir3() with btrfs_open_fd2(). Signed-off-by: Goffredo Baroncelli Signed-off-by: David Sterba --- cmds/filesystem-du.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/cmds/filesystem-du.c b/cmds/filesystem-du.c index 4982123d..5667b488 100644 --- a/cmds/filesystem-du.c +++ b/cmds/filesystem-du.c @@ -456,7 +456,7 @@ static int du_add_file(const char *filename, int dirfd, ret = sprintf(pathp, "/%s", filename); pathp += ret; - fd = open_file_or_dir3(path, &dirstream, O_RDONLY); + fd = btrfs_open_fd2(path, false, false, false); if (fd < 0) { ret = -errno; goto out; @@ -489,6 +489,12 @@ static int du_add_file(const char *filename, int dirfd, } else if (S_ISDIR(st.st_mode)) { struct rb_root *root = shared_extents; + dirstream = fdopendir(fd); + if (!dirstream) { + ret = -errno; + goto out_close; + } + /* * We collect shared extents in an rb_root, the top * level caller will not pass a root down, so use the @@ -542,7 +548,15 @@ static int du_add_file(const char *filename, int dirfd, *ret_shared = file_shared; out_close: - close_file_or_dir(fd, dirstream); + /* + * If dirstream is not NULL, it is derived from fd, so it is enough to + * close the former. + */ + if (dirstream) + closedir(dirstream); + else + close(fd); + out: /* reset path to just before this element */ pathp = pathtmp; -- cgit 1.2.3-korg