mirror of https://github.com/torvalds/linux.git
xfs: return the dquot unlocked from xfs_qm_dqget
There is no reason to lock the dquot in xfs_qm_dqget, which just acquires a reference. Move the locking to the callers, or remove it in cases where the caller instantly unlocks the dquot. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
parent
bf5066e169
commit
55c1bc3eb9
|
|
@ -205,6 +205,7 @@ xchk_dquot_iter(
|
|||
if (error)
|
||||
return error;
|
||||
|
||||
mutex_lock(&dq->q_qlock);
|
||||
cursor->id = dq->q_id + 1;
|
||||
*dqpp = dq;
|
||||
return 1;
|
||||
|
|
|
|||
|
|
@ -635,6 +635,7 @@ xqcheck_walk_observations(
|
|||
if (error)
|
||||
return error;
|
||||
|
||||
mutex_lock(&dq->q_qlock);
|
||||
error = xqcheck_compare_dquot(xqc, dqtype, dq);
|
||||
mutex_unlock(&dq->q_qlock);
|
||||
xfs_qm_dqrele(dq);
|
||||
|
|
|
|||
|
|
@ -187,6 +187,7 @@ xqcheck_commit_dqtype(
|
|||
if (error)
|
||||
return error;
|
||||
|
||||
mutex_lock(&dq->q_qlock);
|
||||
error = xqcheck_commit_dquot(xqc, dqtype, dq);
|
||||
mutex_unlock(&dq->q_qlock);
|
||||
xfs_qm_dqrele(dq);
|
||||
|
|
|
|||
|
|
@ -895,7 +895,7 @@ xfs_qm_dqget_checks(
|
|||
|
||||
/*
|
||||
* Given the file system, id, and type (UDQUOT/GDQUOT/PDQUOT), return a
|
||||
* locked dquot, doing an allocation (if requested) as needed.
|
||||
* dquot, doing an allocation (if requested) as needed.
|
||||
*/
|
||||
int
|
||||
xfs_qm_dqget(
|
||||
|
|
@ -940,7 +940,6 @@ xfs_qm_dqget(
|
|||
trace_xfs_dqget_miss(dqp);
|
||||
found:
|
||||
*O_dqpp = dqp;
|
||||
mutex_lock(&dqp->q_qlock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1098,6 +1097,7 @@ xfs_qm_dqget_next(
|
|||
else if (error != 0)
|
||||
break;
|
||||
|
||||
mutex_lock(&dqp->q_qlock);
|
||||
if (!XFS_IS_DQUOT_UNINITIALIZED(dqp)) {
|
||||
*dqpp = dqp;
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -1268,6 +1268,7 @@ xfs_qm_quotacheck_dqadjust(
|
|||
return error;
|
||||
}
|
||||
|
||||
mutex_lock(&dqp->q_qlock);
|
||||
error = xfs_dquot_attach_buf(NULL, dqp);
|
||||
if (error)
|
||||
goto out_unlock;
|
||||
|
|
@ -1907,7 +1908,6 @@ xfs_qm_vop_dqalloc(
|
|||
/*
|
||||
* Get the ilock in the right order.
|
||||
*/
|
||||
mutex_unlock(&uq->q_qlock);
|
||||
lockflags = XFS_ILOCK_SHARED;
|
||||
xfs_ilock(ip, lockflags);
|
||||
} else {
|
||||
|
|
@ -1929,7 +1929,6 @@ xfs_qm_vop_dqalloc(
|
|||
ASSERT(error != -ENOENT);
|
||||
goto error_rele;
|
||||
}
|
||||
mutex_unlock(&gq->q_qlock);
|
||||
lockflags = XFS_ILOCK_SHARED;
|
||||
xfs_ilock(ip, lockflags);
|
||||
} else {
|
||||
|
|
@ -1947,7 +1946,6 @@ xfs_qm_vop_dqalloc(
|
|||
ASSERT(error != -ENOENT);
|
||||
goto error_rele;
|
||||
}
|
||||
mutex_unlock(&pq->q_qlock);
|
||||
lockflags = XFS_ILOCK_SHARED;
|
||||
xfs_ilock(ip, lockflags);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ xfs_qm_statvfs(
|
|||
struct xfs_dquot *dqp;
|
||||
|
||||
if (!xfs_qm_dqget(mp, ip->i_projid, XFS_DQTYPE_PROJ, false, &dqp)) {
|
||||
mutex_lock(&dqp->q_qlock);
|
||||
xfs_fill_statvfs_from_dquot(statp, ip, dqp);
|
||||
mutex_unlock(&dqp->q_qlock);
|
||||
xfs_qm_dqrele(dqp);
|
||||
|
|
|
|||
|
|
@ -302,6 +302,7 @@ xfs_qm_scall_setqlim(
|
|||
return error;
|
||||
}
|
||||
|
||||
mutex_lock(&dqp->q_qlock);
|
||||
defq = xfs_get_defquota(q, xfs_dquot_type(dqp));
|
||||
mutex_unlock(&dqp->q_qlock);
|
||||
|
||||
|
|
@ -459,6 +460,7 @@ xfs_qm_scall_getquota(
|
|||
* If everything's NULL, this dquot doesn't quite exist as far as
|
||||
* our utility programs are concerned.
|
||||
*/
|
||||
mutex_lock(&dqp->q_qlock);
|
||||
if (XFS_IS_DQUOT_UNINITIALIZED(dqp)) {
|
||||
error = -ENOENT;
|
||||
goto out_put;
|
||||
|
|
|
|||
Loading…
Reference in New Issue