diff options
Diffstat (limited to 'fs/xfs/xfs_dquot.c')
-rw-r--r-- | fs/xfs/xfs_dquot.c | 7 |
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 | ||