diff options
author | Ben Myers <bpm@sgi.com> | 2014-01-09 16:03:18 -0600 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2014-01-09 16:03:18 -0600 |
commit | bf3964c188d686424ff7b69a45941851b9f437f0 (patch) | |
tree | df67c636a6c0aa9f5369a335e1aa9d37d992bd85 /fs/xfs/xfs_qm.c | |
parent | dc16b186bb12c479b6a88bc280b34806a69199ad (diff) | |
parent | eef334e5776c8ef547ada4cec17549929fe590b4 (diff) | |
download | op-kernel-dev-bf3964c188d686424ff7b69a45941851b9f437f0.zip op-kernel-dev-bf3964c188d686424ff7b69a45941851b9f437f0.tar.gz |
Merge branch 'xfs-extent-list-locking-fixes' into for-next
A set of fixes which makes sure we are taking the ilock whenever accessing the
extent list. This was associated with "Access to block zero" messages which
may result in extent list corruption.
Diffstat (limited to 'fs/xfs/xfs_qm.c')
-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 dd88f0e..348e4d2 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -1222,16 +1222,18 @@ xfs_qm_dqiterate( lblkno = 0; maxlblkcnt = XFS_B_TO_FSB(mp, mp->m_super->s_maxbytes); do { + uint lock_mode; + nmaps = XFS_DQITER_MAP_SIZE; /* * We aren't changing the inode itself. Just changing * some of its data. No new blocks are added here, and * the inode is never added to the transaction. */ - xfs_ilock(qip, XFS_ILOCK_SHARED); + lock_mode = xfs_ilock_data_map_shared(qip); error = xfs_bmapi_read(qip, lblkno, maxlblkcnt - lblkno, map, &nmaps, 0); - xfs_iunlock(qip, XFS_ILOCK_SHARED); + xfs_iunlock(qip, lock_mode); if (error) break; |