[PATCH v2 0/7] libfs: group and simplify linux fs code

From: Emanuele Giuseppe Esposito
Date: Tue Apr 21 2020 - 09:51:48 EST


libfs.c has many functions that are useful to implement dentry and inode
operations, but not many at the filesystem level. As a result, code to
create files and inodes has a lot of duplication, to the point that
tracefs has copied several hundred lines from debugfs.

The main two libfs.c functions for filesystems are simple_pin_fs and
simple_release_fs, which hide a somewhat complicated locking sequence
that is needed to serialize vfs_kern_mount and mntget. In this series,
my aim is to add functions that create dentries and inodes of various
kinds (either anonymous inodes, or directory/file/symlink). These
functions take the code that was duplicated across debugfs and tracefs
and move it to libfs.c.

In order to limit the number of arguments to the new functions, the
series first creates a data type that is passed to both
simple_pin_fs/simple_release_fs and the new creation functions. The new
struct, introduced in patch 2, simply groups the "mount" and "count"
arguments to simple_pin_fs and simple_release_fs.

Patches 1-4 are preparations to introduce the new simple_fs struct and
new functions that are useful in the remainder of the series. Patch 5
introduces the dentry and inode creation functions. Patch 6-7 can then
adopt them in debugfs and tracefs.

Signed-off-by: Emanuele Giuseppe Esposito <eesposit@xxxxxxxxxx>

v1->v2: rename simple_new_inode in new_inode_current_time,
more detailed explanations, put all common code in fs/libfs.c

Emanuele Giuseppe Esposito (7):
apparmor: just use vfs_kern_mount to make .null
libfs: wrap simple_pin_fs/simple_release_fs arguments in a struct
libfs: introduce new_inode_current_time
libfs: add alloc_anon_inode wrapper
libfs: add file creation functions
debugfs: switch to simplefs inode creation API
tracefs: switch to simplefs inode creation API

drivers/gpu/drm/drm_drv.c | 11 +-
drivers/misc/cxl/api.c | 13 +-
drivers/scsi/cxlflash/ocxl_hw.c | 14 +-
fs/binfmt_misc.c | 9 +-
fs/configfs/mount.c | 10 +-
fs/debugfs/inode.c | 158 +++--------------
fs/libfs.c | 299 ++++++++++++++++++++++++++++++--
fs/tracefs/inode.c | 96 ++--------
include/linux/fs.h | 31 +++-
security/apparmor/apparmorfs.c | 38 ++--
security/inode.c | 11 +-
11 files changed, 399 insertions(+), 291 deletions(-)

--
2.25.2