aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_dquot.c
diff options
context:
space:
mode:
authorBen Myers <bpm@sgi.com>2014-01-09 17:03:18 -0500
committerBen Myers <bpm@sgi.com>2014-01-09 17:03:18 -0500
commitbf3964c188d686424ff7b69a45941851b9f437f0 (patch)
treedf67c636a6c0aa9f5369a335e1aa9d37d992bd85 /fs/xfs/xfs_dquot.c
parentdc16b186bb12c479b6a88bc280b34806a69199ad (diff)
parenteef334e5776c8ef547ada4cec17549929fe590b4 (diff)
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_dquot.c')
-rw-r--r--fs/xfs/xfs_dquot.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
index 6b1e695caf0e..7aeb4c895b32 100644
--- a/fs/xfs/xfs_dquot.c
+++ b/fs/xfs/xfs_dquot.c
@@ -469,16 +469,17 @@ xfs_qm_dqtobp(
469 struct xfs_mount *mp = dqp->q_mount; 469 struct xfs_mount *mp = dqp->q_mount;
470 xfs_dqid_t id = be32_to_cpu(dqp->q_core.d_id); 470 xfs_dqid_t id = be32_to_cpu(dqp->q_core.d_id);
471 struct xfs_trans *tp = (tpp ? *tpp : NULL); 471 struct xfs_trans *tp = (tpp ? *tpp : NULL);
472 uint lock_mode;
472 473
473 dqp->q_fileoffset = (xfs_fileoff_t)id / mp->m_quotainfo->qi_dqperchunk; 474 dqp->q_fileoffset = (xfs_fileoff_t)id / mp->m_quotainfo->qi_dqperchunk;
474 475
475 xfs_ilock(quotip, XFS_ILOCK_SHARED); 476 lock_mode = xfs_ilock_data_map_shared(quotip);
476 if (!xfs_this_quota_on(dqp->q_mount, dqp->dq_flags)) { 477 if (!xfs_this_quota_on(dqp->q_mount, dqp->dq_flags)) {
477 /* 478 /*
478 * Return if this type of quotas is turned off while we 479 * Return if this type of quotas is turned off while we
479 * didn't have the quota inode lock. 480 * didn't have the quota inode lock.
480 */ 481 */
481 xfs_iunlock(quotip, XFS_ILOCK_SHARED); 482 xfs_iunlock(quotip, lock_mode);
482 return ESRCH; 483 return ESRCH;
483 } 484 }
484 485
@@ -488,7 +489,7 @@ xfs_qm_dqtobp(
488 error = xfs_bmapi_read(quotip, dqp->q_fileoffset, 489 error = xfs_bmapi_read(quotip, dqp->q_fileoffset,
489 XFS_DQUOT_CLUSTER_SIZE_FSB, &map, &nmaps, 0); 490 XFS_DQUOT_CLUSTER_SIZE_FSB, &map, &nmaps, 0);
490 491
491 xfs_iunlock(quotip, XFS_ILOCK_SHARED); 492 xfs_iunlock(quotip, lock_mode);
492 if (error) 493 if (error)
493 return error; 494 return error;
494 495