On Sat, Oct 07, 2023 at 09:35:41PM +0100, Matthew Wilcox (Oracle) wrote: > To use the new rwsem_assert_held()/rwsem_assert_held_write(), we can't > use the existing ASSERT macro. > > xfs_assert_ilocked(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL) checks both the > IOLOCK and the ILOCK are held for write. xfs_isilocked() only checked > that the ILOCK was held for write. > > xfs_assert_ilocked() is always on, even if DEBUG or XFS_WARN aren't > defined. It's a cheap check, so I don't think it's worth defining > it away. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> > --- ...... > -bool > -xfs_isilocked( > +void > +xfs_assert_ilocked( > struct xfs_inode *ip, > uint lock_flags) > { > - if (lock_flags & (XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)) { > - if (!(lock_flags & XFS_ILOCK_SHARED)) > - return !!ip->i_lock.mr_writer; > - return rwsem_is_locked(&ip->i_lock.mr_lock); > - } > - > - if (lock_flags & (XFS_MMAPLOCK_EXCL|XFS_MMAPLOCK_SHARED)) { > - return __xfs_rwsem_islocked(&VFS_I(ip)->i_mapping->invalidate_lock, > - (lock_flags & XFS_MMAPLOCK_SHARED)); > - } > - > - if (lock_flags & (XFS_IOLOCK_EXCL | XFS_IOLOCK_SHARED)) { > - return __xfs_rwsem_islocked(&VFS_I(ip)->i_rwsem, > - (lock_flags & XFS_IOLOCK_SHARED)); > - } > - > - ASSERT(0); > - return false; > + if (lock_flags & XFS_ILOCK_SHARED) > + rwsem_assert_held(&ip->i_lock.mr_lock); > + else if (lock_flags & XFS_ILOCK_EXCL) > + BUG_ON(!ip->i_lock.mr_writer); ASSERT(!ip->i_lock.mr_writer); Otherwise OK. -Dave. -- Dave Chinner david@xxxxxxxxxxxxx