diff options
author | Christoph Hellwig <hch@infradead.org> | 2013-12-06 15:30:14 -0500 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2013-12-18 17:06:38 -0500 |
commit | da51d32d4596a14ee33917b9eca056d4bf41706a (patch) | |
tree | 70e7420e80bf0e535c64dffbc9cbb6586ed7aa79 /fs/xfs | |
parent | f4df8adc8325127ff015ef9c2a8f005edaaedd07 (diff) |
xfs: use xfs_ilock_data_map_shared in xfs_qm_dqiterate
We might not have read in the extent list at this point, so make sure we
take the ilock exclusively if we have to do so.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/xfs_qm.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index dd88f0e27bd8..348e4d2ed6e6 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c | |||
@@ -1222,16 +1222,18 @@ xfs_qm_dqiterate( | |||
1222 | lblkno = 0; | 1222 | lblkno = 0; |
1223 | maxlblkcnt = XFS_B_TO_FSB(mp, mp->m_super->s_maxbytes); | 1223 | maxlblkcnt = XFS_B_TO_FSB(mp, mp->m_super->s_maxbytes); |
1224 | do { | 1224 | do { |
1225 | uint lock_mode; | ||
1226 | |||
1225 | nmaps = XFS_DQITER_MAP_SIZE; | 1227 | nmaps = XFS_DQITER_MAP_SIZE; |
1226 | /* | 1228 | /* |
1227 | * We aren't changing the inode itself. Just changing | 1229 | * We aren't changing the inode itself. Just changing |
1228 | * some of its data. No new blocks are added here, and | 1230 | * some of its data. No new blocks are added here, and |
1229 | * the inode is never added to the transaction. | 1231 | * the inode is never added to the transaction. |
1230 | */ | 1232 | */ |
1231 | xfs_ilock(qip, XFS_ILOCK_SHARED); | 1233 | lock_mode = xfs_ilock_data_map_shared(qip); |
1232 | error = xfs_bmapi_read(qip, lblkno, maxlblkcnt - lblkno, | 1234 | error = xfs_bmapi_read(qip, lblkno, maxlblkcnt - lblkno, |
1233 | map, &nmaps, 0); | 1235 | map, &nmaps, 0); |
1234 | xfs_iunlock(qip, XFS_ILOCK_SHARED); | 1236 | xfs_iunlock(qip, lock_mode); |
1235 | if (error) | 1237 | if (error) |
1236 | break; | 1238 | break; |
1237 | 1239 | ||