aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2013-12-06 15:30:17 -0500
committerBen Myers <bpm@sgi.com>2013-12-18 17:08:46 -0500
commiteef334e5776c8ef547ada4cec17549929fe590b4 (patch)
treecf6d3e90b0923494d9201c134e89dd5122cece98
parent568d994e9f53657cb6b3e9c95a83c130d36f83c9 (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.c4
-rw-r--r--fs/xfs/xfs_inode_fork.c2
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);