xfs: Refactor xfs_isilocked()
Introduce a new __xfs_rwsem_islocked predicate to encapsulate checking the state of a rw_semaphore, then refactor xfs_isilocked to use it. Signed-off-by: Pavel Reichl <preichl@redhat.com> Suggested-by: Dave Chinner <dchinner@redhat.com> Suggested-by: Eric Sandeen <sandeen@redhat.com> Suggested-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
@@ -343,9 +343,29 @@ xfs_ilock_demote(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DEBUG) || defined(XFS_WARN)
|
#if defined(DEBUG) || defined(XFS_WARN)
|
||||||
int
|
static inline bool
|
||||||
|
__xfs_rwsem_islocked(
|
||||||
|
struct rw_semaphore *rwsem,
|
||||||
|
bool shared)
|
||||||
|
{
|
||||||
|
if (!debug_locks)
|
||||||
|
return rwsem_is_locked(rwsem);
|
||||||
|
|
||||||
|
if (!shared)
|
||||||
|
return lockdep_is_held_type(rwsem, 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We are checking that the lock is held at least in shared
|
||||||
|
* mode but don't care that it might be held exclusively
|
||||||
|
* (i.e. shared | excl). Hence we check if the lock is held
|
||||||
|
* in any mode rather than an explicit shared mode.
|
||||||
|
*/
|
||||||
|
return lockdep_is_held_type(rwsem, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
xfs_isilocked(
|
xfs_isilocked(
|
||||||
xfs_inode_t *ip,
|
struct xfs_inode *ip,
|
||||||
uint lock_flags)
|
uint lock_flags)
|
||||||
{
|
{
|
||||||
if (lock_flags & (XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)) {
|
if (lock_flags & (XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)) {
|
||||||
@@ -360,15 +380,13 @@ xfs_isilocked(
|
|||||||
return rwsem_is_locked(&ip->i_mmaplock.mr_lock);
|
return rwsem_is_locked(&ip->i_mmaplock.mr_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lock_flags & (XFS_IOLOCK_EXCL|XFS_IOLOCK_SHARED)) {
|
if (lock_flags & (XFS_IOLOCK_EXCL | XFS_IOLOCK_SHARED)) {
|
||||||
if (!(lock_flags & XFS_IOLOCK_SHARED))
|
return __xfs_rwsem_islocked(&VFS_I(ip)->i_rwsem,
|
||||||
return !debug_locks ||
|
(lock_flags & XFS_IOLOCK_SHARED));
|
||||||
lockdep_is_held_type(&VFS_I(ip)->i_rwsem, 0);
|
|
||||||
return rwsem_is_locked(&VFS_I(ip)->i_rwsem);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -410,7 +410,7 @@ void xfs_ilock(xfs_inode_t *, uint);
|
|||||||
int xfs_ilock_nowait(xfs_inode_t *, uint);
|
int xfs_ilock_nowait(xfs_inode_t *, uint);
|
||||||
void xfs_iunlock(xfs_inode_t *, uint);
|
void xfs_iunlock(xfs_inode_t *, uint);
|
||||||
void xfs_ilock_demote(xfs_inode_t *, uint);
|
void xfs_ilock_demote(xfs_inode_t *, uint);
|
||||||
int xfs_isilocked(xfs_inode_t *, uint);
|
bool xfs_isilocked(struct xfs_inode *, uint);
|
||||||
uint xfs_ilock_data_map_shared(struct xfs_inode *);
|
uint xfs_ilock_data_map_shared(struct xfs_inode *);
|
||||||
uint xfs_ilock_attr_map_shared(struct xfs_inode *);
|
uint xfs_ilock_attr_map_shared(struct xfs_inode *);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user