mbox series

[0/9,V2,btrfs-progs] Remove unused dirstream variable

Message ID cover.1707423567.git.kreijack@inwind.it (mailing list archive)
Headers show
Series Remove unused dirstream variable | expand

Message

Goffredo Baroncelli Feb. 8, 2024, 8:19 p.m. UTC
From: Goffredo Baroncelli <kreijack@inwind.it>

For historical reason, the helpers [btrfs_]open_[file_or_]dir() work with
directory returning the 'fd' and a 'dirstream' variable returned by
opendir(3).

If the path is a file, the 'fd' is computed from open(2) and dirstream is 
set to NULL. If the path is a directory, first the directory is opened by 
opendir(3), then the 'fd' is computed using dirfd(3).
However the 'dirstream' returned by opendir(3) is left open until 'fd'
is not needed anymore.

In near every case the 'dirstream' variable is not used. Only 'fd' is used.

A call to close_file_or_dir() freed both 'fd' and 'dirstream'.

Aim of this patch set is to getrid of this complexity; when the path of
a directory is passed, the fd is get directly using open(path, O_RDONLY):
so we don't need to use readdir(3) and to maintain the not used variable
'dirstream'.

So each call of a legacy [btrfs_]open_[file_or_]dir() helper is
replaced by a call to the new btrfs_open_[file_or_]dir_fd() functions.
These functions return only the file descriptor.

Also close_file_or_dir() is not needed anymore.

The first patch, introduces the new helpers; the last patch removed the
unused older helpers. The intermediate patches updated the code.

The 3rd patch updated also the add_seen_fsid() function. Before it
stored the dirstream variable. But now it is not needed anymore.
So we removed a parameter of the functions and a field in the structure.

In the 8th patch, the only occurrences where 'dirstream' is used was
corrected: the dirstream is computed using fdopendir(3), and the cleanup
is updated according.

The results is:
- removed 7 functions
- add 4 new functions
- removed ~100 lines
- removed 44 occurrences of an unused 'dirstream' variable.


Changelog:

09/dec/2023: V1: first issue
08/feb/2024: V2
	- rebased over 6.7
	- swapped the tests order inside the btrfs_open_fd2() function
	  to prevent the failure of the test 003-fi-resize-args
	- removed two new occurences of open_file_or_dir() inside
	  cmd_scrub_limit() (introduced after V1 pateches set)


BR
G.Baroncelli


Goffredo Baroncelli (9):
  Killing dirstream: add helpers
  Killing dirstream: replace btrfs_open_dir with btrfs_open_dir_fd
  Killing dirstream: replace btrfs_open_dir with btrfs_open_dir_fd
  Killing dirstream: replace open_path_or_dev_mnt with btrfs_open_mnt_fd
  Killing dirstream: replace open_file_or_dir3 with btrfs_open_fd2
  Killing dirstream: replace btrfs_open_file_or_dir with
    btrfs_open_file_or_dir_fd
  Killing dirstream: replace open_file_or_dir with btrfs_open_fd2
  Killing dirstream: remove open_file_or_dir3 from du_add_file
  Killing dirstream: remove unused functions

 cmds/balance.c          |  27 ++++-----
 cmds/device.c           |  26 ++++-----
 cmds/filesystem-du.c    |  18 +++++-
 cmds/filesystem-usage.c |   5 +-
 cmds/filesystem.c       |  26 ++++-----
 cmds/inspect.c          |  35 +++++-------
 cmds/property.c         |   5 +-
 cmds/qgroup.c           |  29 ++++------
 cmds/quota.c            |  16 +++---
 cmds/replace.c          |  17 +++---
 cmds/scrub.c            |  20 +++----
 cmds/subvolume-list.c   |   5 +-
 cmds/subvolume.c        |  44 ++++++---------
 common/device-scan.c    |   6 +-
 common/device-scan.h    |   4 +-
 common/open-utils.c     | 118 +++++++++++-----------------------------
 common/open-utils.h     |  13 ++---
 common/utils.c          |   5 +-
 18 files changed, 162 insertions(+), 257 deletions(-)

Comments

David Sterba Feb. 20, 2024, 12:01 p.m. UTC | #1
On Thu, Feb 08, 2024 at 09:19:18PM +0100, Goffredo Baroncelli wrote:
> From: Goffredo Baroncelli <kreijack@inwind.it>
> 
> For historical reason, the helpers [btrfs_]open_[file_or_]dir() work with
> directory returning the 'fd' and a 'dirstream' variable returned by
> opendir(3).
> 
> If the path is a file, the 'fd' is computed from open(2) and dirstream is 
> set to NULL. If the path is a directory, first the directory is opened by 
> opendir(3), then the 'fd' is computed using dirfd(3).
> However the 'dirstream' returned by opendir(3) is left open until 'fd'
> is not needed anymore.
> 
> In near every case the 'dirstream' variable is not used. Only 'fd' is used.
> 
> A call to close_file_or_dir() freed both 'fd' and 'dirstream'.
> 
> Aim of this patch set is to getrid of this complexity; when the path of
> a directory is passed, the fd is get directly using open(path, O_RDONLY):
> so we don't need to use readdir(3) and to maintain the not used variable
> 'dirstream'.
> 
> So each call of a legacy [btrfs_]open_[file_or_]dir() helper is
> replaced by a call to the new btrfs_open_[file_or_]dir_fd() functions.
> These functions return only the file descriptor.
> 
> Also close_file_or_dir() is not needed anymore.
> 
> The first patch, introduces the new helpers; the last patch removed the
> unused older helpers. The intermediate patches updated the code.
> 
> The 3rd patch updated also the add_seen_fsid() function. Before it
> stored the dirstream variable. But now it is not needed anymore.
> So we removed a parameter of the functions and a field in the structure.
> 
> In the 8th patch, the only occurrences where 'dirstream' is used was
> corrected: the dirstream is computed using fdopendir(3), and the cleanup
> is updated according.
> 
> The results is:
> - removed 7 functions
> - add 4 new functions
> - removed ~100 lines
> - removed 44 occurrences of an unused 'dirstream' variable.
> 
> 
> Changelog:
> 
> 09/dec/2023: V1: first issue
> 08/feb/2024: V2
> 	- rebased over 6.7
> 	- swapped the tests order inside the btrfs_open_fd2() function
> 	  to prevent the failure of the test 003-fi-resize-args
> 	- removed two new occurences of open_file_or_dir() inside
> 	  cmd_scrub_limit() (introduced after V1 pateches set)
> 
> 
> BR
> G.Baroncelli
> 
> 
> Goffredo Baroncelli (9):
>   Killing dirstream: add helpers
>   Killing dirstream: replace btrfs_open_dir with btrfs_open_dir_fd
>   Killing dirstream: replace btrfs_open_dir with btrfs_open_dir_fd
>   Killing dirstream: replace open_path_or_dev_mnt with btrfs_open_mnt_fd
>   Killing dirstream: replace open_file_or_dir3 with btrfs_open_fd2
>   Killing dirstream: replace btrfs_open_file_or_dir with
>     btrfs_open_file_or_dir_fd
>   Killing dirstream: replace open_file_or_dir with btrfs_open_fd2
>   Killing dirstream: remove open_file_or_dir3 from du_add_file
>   Killing dirstream: remove unused functions

Added to devel with some updates, thanks.