mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-28 20:02:17 +00:00
xfs: improve xfs_isilocked
Use rwsem_is_locked to make the assertations for shared locks work. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
parent
070ecdca54
commit
f936972949
1 changed files with 10 additions and 16 deletions
|
@ -741,30 +741,24 @@ xfs_ilock_demote(
|
|||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
/*
|
||||
* Debug-only routine, without additional rw_semaphore APIs, we can
|
||||
* now only answer requests regarding whether we hold the lock for write
|
||||
* (reader state is outside our visibility, we only track writer state).
|
||||
*
|
||||
* Note: this means !xfs_isilocked would give false positives, so don't do that.
|
||||
*/
|
||||
int
|
||||
xfs_isilocked(
|
||||
xfs_inode_t *ip,
|
||||
uint lock_flags)
|
||||
{
|
||||
if ((lock_flags & (XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)) ==
|
||||
XFS_ILOCK_EXCL) {
|
||||
if (!ip->i_lock.mr_writer)
|
||||
return 0;
|
||||
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_IOLOCK_EXCL|XFS_IOLOCK_SHARED)) ==
|
||||
XFS_IOLOCK_EXCL) {
|
||||
if (!ip->i_iolock.mr_writer)
|
||||
return 0;
|
||||
if (lock_flags & (XFS_IOLOCK_EXCL|XFS_IOLOCK_SHARED)) {
|
||||
if (!(lock_flags & XFS_IOLOCK_SHARED))
|
||||
return !!ip->i_iolock.mr_writer;
|
||||
return rwsem_is_locked(&ip->i_iolock.mr_lock);
|
||||
}
|
||||
|
||||
return 1;
|
||||
ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue