mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
xfs: drop dquot flush lock when we can't find a buffer to flush
LOLLM noticed that xfs_qm_flush_one fails to drop the dquot flush lock
if it can't grab the buffer associated with the dquot. Since there's no
buffer, nobody else is going to drop the dqflock, so we need to do it
ourselves.
Cc: stable@vger.kernel.org # v6.13
Fixes: ca378189fd ("xfs: convert quotacheck to attach dquot buffers")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Assisted-by: LOLLM # finding obvious bugs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
parent
65f39d09d7
commit
ffb48dccce
|
|
@ -1432,16 +1432,22 @@ xfs_qm_flush_one(
|
|||
|
||||
error = xfs_dquot_use_attached_buf(dqp, &bp);
|
||||
if (error)
|
||||
goto out_unlock;
|
||||
goto out_dqflock;
|
||||
if (!bp) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto out_unlock;
|
||||
goto out_dqflock;
|
||||
}
|
||||
|
||||
error = xfs_qm_dqflush(dqp, bp);
|
||||
if (!error)
|
||||
xfs_buf_delwri_queue(bp, buffer_list);
|
||||
xfs_buf_relse(bp);
|
||||
mutex_unlock(&dqp->q_qlock);
|
||||
xfs_qm_dqrele(dqp);
|
||||
return error;
|
||||
|
||||
out_dqflock:
|
||||
xfs_dqfunlock(dqp);
|
||||
out_unlock:
|
||||
mutex_unlock(&dqp->q_qlock);
|
||||
xfs_qm_dqrele(dqp);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user