Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76129030 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Ben Myers
Browse files

xfs: unlock the AGI buffer when looping in xfs_dialloc



Also update some commens in the area to make the code easier to read.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarMark Tinguely <tinguely@sgi.com>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarBen Myers <bpm@sgi.com>
parent 0b9e3f6d
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -962,23 +962,22 @@ xfs_dialloc(
		if (!pag->pagi_freecount && !okalloc)
			goto nextag;

		/*
		 * Then read in the AGI buffer and recheck with the AGI buffer
		 * lock held.
		 */
		error = xfs_ialloc_read_agi(mp, tp, agno, &agbp);
		if (error)
			goto out_error;

		/*
		 * Once the AGI has been read in we have to recheck
		 * pagi_freecount with the AGI buffer lock held.
		 */
		if (pag->pagi_freecount) {
			xfs_perag_put(pag);
			goto out_alloc;
		}

		if (!okalloc) {
			xfs_trans_brelse(tp, agbp);
			goto nextag;
		}
		if (!okalloc)
			goto nextag_relse_buffer;


		error = xfs_ialloc_ag_alloc(tp, agbp, &ialloced);
		if (error) {
@@ -1007,6 +1006,8 @@ xfs_dialloc(
			return 0;
		}

nextag_relse_buffer:
		xfs_trans_brelse(tp, agbp);
nextag:
		xfs_perag_put(pag);
		if (++agno == mp->m_sb.sb_agcount)