diff options
author | Christoph Hellwig <hch@infradead.org> | 2013-12-06 15:30:17 -0500 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2013-12-18 17:08:46 -0500 |
commit | eef334e5776c8ef547ada4cec17549929fe590b4 (patch) | |
tree | cf6d3e90b0923494d9201c134e89dd5122cece98 | |
parent | 568d994e9f53657cb6b3e9c95a83c130d36f83c9 (diff) |
xfs: assert that we hold the ilock for extent map access
Make sure that xfs_bmapi_read has the ilock held in some way, and that
xfs_bmapi_write, xfs_bmapi_delay, xfs_bunmapi and xfs_iread_extents are
called with the ilock held exclusively.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
-rw-r--r-- | fs/xfs/xfs_bmap.c | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_inode_fork.c | 2 |
2 files changed, 6 insertions, 0 deletions
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index 8401f11f378f..dbf27384b744 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c | |||
@@ -4002,6 +4002,7 @@ xfs_bmapi_read( | |||
4002 | ASSERT(*nmap >= 1); | 4002 | ASSERT(*nmap >= 1); |
4003 | ASSERT(!(flags & ~(XFS_BMAPI_ATTRFORK|XFS_BMAPI_ENTIRE| | 4003 | ASSERT(!(flags & ~(XFS_BMAPI_ATTRFORK|XFS_BMAPI_ENTIRE| |
4004 | XFS_BMAPI_IGSTATE))); | 4004 | XFS_BMAPI_IGSTATE))); |
4005 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_SHARED|XFS_ILOCK_EXCL)); | ||
4005 | 4006 | ||
4006 | if (unlikely(XFS_TEST_ERROR( | 4007 | if (unlikely(XFS_TEST_ERROR( |
4007 | (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS && | 4008 | (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS && |
@@ -4196,6 +4197,7 @@ xfs_bmapi_delay( | |||
4196 | ASSERT(*nmap >= 1); | 4197 | ASSERT(*nmap >= 1); |
4197 | ASSERT(*nmap <= XFS_BMAP_MAX_NMAP); | 4198 | ASSERT(*nmap <= XFS_BMAP_MAX_NMAP); |
4198 | ASSERT(!(flags & ~XFS_BMAPI_ENTIRE)); | 4199 | ASSERT(!(flags & ~XFS_BMAPI_ENTIRE)); |
4200 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); | ||
4199 | 4201 | ||
4200 | if (unlikely(XFS_TEST_ERROR( | 4202 | if (unlikely(XFS_TEST_ERROR( |
4201 | (XFS_IFORK_FORMAT(ip, XFS_DATA_FORK) != XFS_DINODE_FMT_EXTENTS && | 4203 | (XFS_IFORK_FORMAT(ip, XFS_DATA_FORK) != XFS_DINODE_FMT_EXTENTS && |
@@ -4489,6 +4491,7 @@ xfs_bmapi_write( | |||
4489 | ASSERT(tp != NULL); | 4491 | ASSERT(tp != NULL); |
4490 | ASSERT(len > 0); | 4492 | ASSERT(len > 0); |
4491 | ASSERT(XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_LOCAL); | 4493 | ASSERT(XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_LOCAL); |
4494 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); | ||
4492 | 4495 | ||
4493 | if (unlikely(XFS_TEST_ERROR( | 4496 | if (unlikely(XFS_TEST_ERROR( |
4494 | (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS && | 4497 | (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS && |
@@ -5040,6 +5043,7 @@ xfs_bunmapi( | |||
5040 | if (XFS_FORCED_SHUTDOWN(mp)) | 5043 | if (XFS_FORCED_SHUTDOWN(mp)) |
5041 | return XFS_ERROR(EIO); | 5044 | return XFS_ERROR(EIO); |
5042 | 5045 | ||
5046 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); | ||
5043 | ASSERT(len > 0); | 5047 | ASSERT(len > 0); |
5044 | ASSERT(nexts >= 0); | 5048 | ASSERT(nexts >= 0); |
5045 | 5049 | ||
diff --git a/fs/xfs/xfs_inode_fork.c b/fs/xfs/xfs_inode_fork.c index cfee14a83cfe..e16985e1c2fd 100644 --- a/fs/xfs/xfs_inode_fork.c +++ b/fs/xfs/xfs_inode_fork.c | |||
@@ -431,6 +431,8 @@ xfs_iread_extents( | |||
431 | xfs_ifork_t *ifp; | 431 | xfs_ifork_t *ifp; |
432 | xfs_extnum_t nextents; | 432 | xfs_extnum_t nextents; |
433 | 433 | ||
434 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); | ||
435 | |||
434 | if (unlikely(XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE)) { | 436 | if (unlikely(XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE)) { |
435 | XFS_ERROR_REPORT("xfs_iread_extents", XFS_ERRLEVEL_LOW, | 437 | XFS_ERROR_REPORT("xfs_iread_extents", XFS_ERRLEVEL_LOW, |
436 | ip->i_mount); | 438 | ip->i_mount); |