On Wed, Nov 22, 2023 at 2:27 PM Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > Similar to sb_write_started() for use by other sb freeze levels. > > Unlike the boolean sb_write_started(), this helper returns a tristate > to distiguish the cases of lockdep disabled or unknown lock state. > > This is needed for fanotify "pre content" events. > > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> > --- > include/linux/fs.h | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) > > diff --git a/include/linux/fs.h b/include/linux/fs.h > index 98b7a7a8c42e..e8aa48797bf4 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -1645,9 +1645,22 @@ static inline bool __sb_start_write_trylock(struct super_block *sb, int level) > #define __sb_writers_release(sb, lev) \ > percpu_rwsem_release(&(sb)->s_writers.rw_sem[(lev)-1], 1, _THIS_IP_) > > +/** > + * __sb_write_started - check if sb freeze level is held > + * @sb: the super we write to Missing Kerneldoc of arg: + * @level: the freeze level > + * > + * > 0 sb freeze level is held > + * 0 sb freeze level is not held > + * < 0 !CONFIG_LOCKDEP/LOCK_STATE_UNKNOWN > + */ > +static inline int __sb_write_started(const struct super_block *sb, int level) > +{ > + return lockdep_is_held_type(sb->s_writers.rw_sem + level - 1, 1); > +} > + > static inline bool sb_write_started(const struct super_block *sb) > { > - return lockdep_is_held_type(sb->s_writers.rw_sem + SB_FREEZE_WRITE - 1, 1); > + return __sb_write_started(sb, SB_FREEZE_WRITE); > } > > /** > -- > 2.34.1 >