]> www.infradead.org Git - users/jedix/linux-maple.git/commit
saner replacement for debugfs_rename()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 12 Jan 2025 08:07:05 +0000 (08:07 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Jan 2025 12:14:37 +0000 (13:14 +0100)
commitf7862dfef6612b87b2ad8352c4d73886f09456d6
tree4fa45474657dbcc06f5df24603a9ea6749013eec
parentc2a3a216c7e9ad790ba3b5972ee93eee8fe337b1
saner replacement for debugfs_rename()

Existing primitive has several problems:
1) calling conventions are clumsy - it returns a dentry reference
that is either identical to its second argument or is an ERR_PTR(-E...);
in both cases no refcount changes happen.  Inconvenient for users and
bug-prone; it would be better to have it return 0 on success and -E... on
failure.
2) it allows cross-directory moves; however, no such caller have
ever materialized and considering the way debugfs is used, it's unlikely
to happen in the future.  What's more, any such caller would have fun
issues to deal with wrt interplay with recursive removal.  It also makes
the calling conventions clumsier...
3) tautological rename fails; the callers have no race-free way
to deal with that.
4) new name must have been formed by the caller; quite a few
callers have it done by sprintf/kasprintf/etc., ending up with considerable
boilerplate.

Proposed replacement: int debugfs_change_name(dentry, fmt, ...).  All callers
convert to that easily, and it's simpler internally.

IMO debugfs_rename() should go; if we ever get a real-world use case for
cross-directory moves in debugfs, we can always look into the right way
to handle that.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Link: https://lore.kernel.org/r/20250112080705.141166-21-viro@zeniv.linux.org.uk
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
13 files changed:
Documentation/filesystems/debugfs.rst
drivers/net/bonding/bond_debugfs.c
drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c
drivers/net/ethernet/marvell/skge.c
drivers/net/ethernet/marvell/sky2.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/opp/debugfs.c
fs/debugfs/inode.c
include/linux/debugfs.h
mm/shrinker_debug.c
net/hsr/hsr_debugfs.c
net/mac80211/debugfs_netdev.c
net/wireless/core.c