forked from Minki/linux
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:
parent
70f3bad8c3
commit
e31cbde7ec
@ -343,9 +343,29 @@ xfs_ilock_demote(
|
||||
}
|
||||
|
||||
#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_inode_t *ip,
|
||||
struct xfs_inode *ip,
|
||||
uint lock_flags)
|
||||
{
|
||||
if (lock_flags & (XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)) {
|
||||
@ -360,15 +380,13 @@ xfs_isilocked(
|
||||
return rwsem_is_locked(&ip->i_mmaplock.mr_lock);
|
||||
}
|
||||
|
||||
if (lock_flags & (XFS_IOLOCK_EXCL|XFS_IOLOCK_SHARED)) {
|
||||
if (!(lock_flags & XFS_IOLOCK_SHARED))
|
||||
return !debug_locks ||
|
||||
lockdep_is_held_type(&VFS_I(ip)->i_rwsem, 0);
|
||||
return rwsem_is_locked(&VFS_I(ip)->i_rwsem);
|
||||
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 0;
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -410,7 +410,7 @@ void xfs_ilock(xfs_inode_t *, uint);
|
||||
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_isilocked(struct xfs_inode *, uint);
|
||||
uint xfs_ilock_data_map_shared(struct xfs_inode *);
|
||||
uint xfs_ilock_attr_map_shared(struct xfs_inode *);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user