Skip to content

RFC common implementation of dirent file types

Phillip Potter linux-btrfs linux-fsdevel lkml 1 version In review

Get series with b4
b4 am 20181023201952.GA15676@pathfinder

Versions newest first

  1. v1 RFC Latest0 of 11 patches 3 repliesIn review

Patches in v1 No applies recorded yet

None of the 11 patches the cover letter announces are in this archive.

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [RFC][PATCH 00/11] common implementation of dirent file types

This cleanup series is a respin of Amir Goldstein's work, created in late 2016. It removes several instances of duplicated code. Most of the duplication dates back to git pre-historic era.

The controversial aspect of this cleanup is that it uses common code to handle file system specific on-disk format bits. All 7 file systems use a single byte to store dirent file type on-disk and all of them use the same conversion routines from i_mode to 4bits DT_* constants to 3bits on-disk FT_* constants.

Patch 1 places a common implementation in file_type.h and add some useful conversion helpers.

Patches 2-3 make use of some helpers in ufs and hfsplus without any on-disk implications.

Patches 4-10 replace the specific implementations in ext2, exofs, ext4, ocfs2, f2fs, nilfs and btrfs with the common implementation. These patches also now include compile-time checks to ensure that the file system specific on-disk bits are equivalent to the common implementation FT_* bits. These compile-time checks are only included once per file system, as my reasoning is that regardless of their location, the build will fail/succeed anyway.

In addition, where needed (for patches which no longer apply), I've rebased them to apply to the newest 4.19 kernel sources. Each patch is independent of the others, except for the common implementation itself which they all depend on.

I would love feedback as newish kernel contributor, particularly from the original author Amir who suggested this task for me. I hope the various subsystem/fs maintainers will see fit to accept this work also.

Phillip Potter (10):
fs: common implementation of file type conversions
ufs: use fs_umode_to_dtype() helper
hfsplus: use fs_umode_to_dtype() helper
ext2: use common file type conversion
exofs: use common file type conversion
ext4: use common file type conversion
ocfs2: use common file type conversion
f2fs: use common file type conversion
nilfs2: use common file type conversion
btrfs: use common file type conversion

---
 MAINTAINERS                        |   1 +
 fs/btrfs/btrfs_inode.h             |   2 -
 fs/btrfs/delayed-inode.c           |   2 +-
 fs/btrfs/inode.c                   |  35 +++++-----
 fs/exofs/dir.c                     |  49 +++++--------
 fs/ext2/dir.c                      |  51 ++++++--------
 fs/ext4/ext4.h                     |  35 +++++-----
 fs/f2fs/dir.c                      |  43 +++++-------
 fs/f2fs/inline.c                   |   2 +-
 fs/hfsplus/dir.c                   |  16 +----
 fs/nilfs2/dir.c                    |  54 +++++----------
 fs/ocfs2/dir.c                     |  32 +++++----
 fs/ocfs2/ocfs2_fs.h                |  13 +---
 fs/ufs/util.h                      |  29 +-------
 include/linux/f2fs_fs.h            |   8 ++-
 include/linux/file_type.h          | 108 +++++++++++++++++++++++++++++
 include/linux/fs.h                 |  17 +----
 include/uapi/linux/btrfs_tree.h    |   2 +
 include/uapi/linux/nilfs2_ondisk.h |   1 +
 19 files changed, 256 insertions(+), 244 deletions(-)
 create mode 100644 include/linux/file_type.h

--
2.17.2