On Wed, Sep 06, 2023 at 10:07:24AM -0700, Darrick J. Wong wrote: > On Wed, Sep 06, 2023 at 05:00:14PM +0100, Matthew Wilcox wrote: > > +++ b/fs/xfs/xfs_inode.c > > @@ -361,7 +361,7 @@ xfs_isilocked( > > { > > if (lock_flags & (XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)) { > > if (!(lock_flags & XFS_ILOCK_SHARED)) > > - return !!ip->i_lock.mr_writer; > > + return rwsem_is_write_locked(&ip->i_lock.mr_lock); > > You'd be better off converting this to: > > return __xfs_rwsem_islocked(&ip->i_lock.mr_lock, > (lock_flags & XFS_ILOCK_SHARED)); > > And then fixing __xfs_rwsem_islocked to do: > > static inline bool > __xfs_rwsem_islocked( > struct rw_semaphore *rwsem, > bool shared) > { > if (!debug_locks) { > if (!shared) > return rwsem_is_write_locked(rwsem); > return rwsem_is_locked(rwsem); > } > > ... > } Thanks. > > +++ b/include/linux/rwsem.h > > @@ -72,6 +72,11 @@ static inline int rwsem_is_locked(struct rw_semaphore *sem) > > return atomic_long_read(&sem->count) != 0; > > } > > > > +static inline int rwsem_is_write_locked(struct rw_semaphore *sem) > > +{ > > + return atomic_long_read(&sem->count) & 1; > > > atomic_long_read(&sem->count) & RWSEM_WRITER_LOCKED ? Then this would either have to be in rwsem.c or we'd have to move the definition of RWSEM_WRITER_LOCKED to rwsem.h. All three options are kind of bad. I think I hate the bare '1' least.