Hi Pavel, Thanks for the patch. Please see inline-comment. On 02/03/2020 09:59 AM, Pavel Reichl wrote: > Add xfs_is_ilocked(), xfs_is_iolocked() and xfs_is_mmaplocked() > > Signed-off-by: Pavel Reichl <preichl@xxxxxxxxxx> > Suggested-by: Dave Chinner <dchinner@xxxxxxxxxx> > --- > fs/xfs/xfs_inode.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++ > fs/xfs/xfs_inode.h | 3 +++ > 2 files changed, 56 insertions(+) > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index c5077e6326c7..80874c80df6d 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -372,6 +372,59 @@ xfs_isilocked( > ASSERT(0); > return 0; > } > + > +static inline bool > +__xfs_is_ilocked( > + struct rw_semaphore *rwsem, > + bool shared, > + bool excl) > +{ > + bool locked = false; > + > + if (!rwsem_is_locked(rwsem)) > + return false; > + > + if (!debug_locks) > + return true; > + > + if (shared) > + locked = lockdep_is_held_type(rwsem, 0); > + > + if (excl) > + locked |= lockdep_is_held_type(rwsem, 1); > + > + return locked; > +} > + > +bool > +xfs_is_ilocked( > + struct xfs_inode *ip, > + int lock_flags) nit:- isn't above lock_flag variable should be uint ? Is there a particular reason that it has int type ? > +{ > + return __xfs_is_ilocked(&ip->i_lock.mr_lock, > + (lock_flags & XFS_ILOCK_SHARED), > + (lock_flags & XFS_ILOCK_EXCL)); > +} > + > +bool > +xfs_is_mmaplocked( > + struct xfs_inode *ip, > + int lock_flags) Same here. > +{ > + return __xfs_is_ilocked(&ip->i_mmaplock.mr_lock, > + (lock_flags & XFS_MMAPLOCK_SHARED), > + (lock_flags & XFS_MMAPLOCK_EXCL)); > +} > + > +bool > +xfs_is_iolocked( > + struct xfs_inode *ip, > + int lock_flags) Same here. > +{ > + return __xfs_is_ilocked(&VFS_I(ip)->i_rwsem, > + (lock_flags & XFS_IOLOCK_SHARED), > + (lock_flags & XFS_IOLOCK_EXCL)); > +} > #endif > > /* > diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h > index 492e53992fa9..6ba575f35c1f 100644 > --- a/fs/xfs/xfs_inode.h > +++ b/fs/xfs/xfs_inode.h > @@ -417,6 +417,9 @@ int xfs_ilock_nowait(xfs_inode_t *, uint); > void xfs_iunlock(xfs_inode_t *, uint); > void xfs_ilock_demote(xfs_inode_t *, uint); > int xfs_isilocked(xfs_inode_t *, uint); > +bool xfs_is_ilocked(struct xfs_inode *, int); > +bool xfs_is_mmaplocked(struct xfs_inode *, int); > +bool xfs_is_iolocked(struct xfs_inode *, int); > uint xfs_ilock_data_map_shared(struct xfs_inode *); > uint xfs_ilock_attr_map_shared(struct xfs_inode *); > >