Messages in this thread | | | From | Nicolai Stange <> | Subject | [RFC PATCH v2 0/9] debugfs: per-file removal protection | Date | Wed, 3 May 2017 16:17:17 +0200 |
| |
Hello Greg,
this is the second attempt to implement debugfs file removal protection at file granularity. The first one can be found at [1].
Note that I left out the IB/hfi1 people from the get_maintainer list and thus, sent this in RFC mode only because the following still needs to get sorted out: 1. It's still not clear whether something like [9/9] ("debugfs: free debugfs_fsdata instances") is actually wanted. Your advice welcome!
2. The kernel test robot complained about [2/9] ("debugfs: defer debugfs_fsdata allocation to first usage") in v1. Despite Xiaolong's support, I wasn't able to reproduce this, but I hope that the changes mentioned below resolve it now. We'll see.
Thanks,
Nicolai
[1] http://lkml.kernel.org/r/20170416095137.2784-1-nicstange@gmail.com
Changes to v1:
[2/9] ("debugfs: implement per-file removal protection") - In an attempt to resolve the issue reported by the kernel test robot for v1, restrict the "extended removal logic" to regular files in __debugfs_remove().
[8/9] ("debugfs: defer debugfs_fsdata allocation to first usage") - Following review from Johannes Berg, replace the WARN_ON in debugfs_real_fops() by a WARN + 'return NULL'. The return NULL is expected to crash current soon and serves as an alternative for a BUG_ON here. - Mention the change in debugfs_real_fops() in the commit message.
[9/9] ("debugfs: free debugfs_fsdata instances") - Following advice from Paul E. McKenney, make debugfs_file_get() release the RCU read section inbetween retry loop iterations. - Fix a race in debugfs_file_get()'s path handling a concurrent debugfs_file_put(): the former must not "help out resetting ->d_fsdata" because this can wipe out another debugfs_file_get()'s achievements.
Nicolai Stange (9): debugfs: add support for more elaborate ->d_fsdata debugfs: implement per-file removal protection debugfs: debugfs_real_fops(): drop __must_hold sparse annotation debugfs: convert to debugfs_file_get() and -put() IB/hfi1: convert to debugfs_file_get() and -put() debugfs: purge obsolete SRCU based removal protection debugfs: call debugfs_real_fops() only after debugfs_file_get() debugfs: defer debugfs_fsdata allocation to first usage debugfs: free debugfs_fsdata instances
drivers/infiniband/hw/hfi1/debugfs.c | 20 +-- fs/debugfs/file.c | 278 ++++++++++++++++++++++++----------- fs/debugfs/inode.c | 60 ++++++-- fs/debugfs/internal.h | 15 ++ include/linux/debugfs.h | 33 +---- lib/Kconfig.debug | 1 - 6 files changed, 266 insertions(+), 141 deletions(-)
-- 2.12.2
| |