mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-04 01:24:12 +08:00
xfs: reflow the tail end of xfs_bmap_rtalloc
Reorder the tail end of xfs_bmap_rtalloc so that the successfully allocation is in the main path, and the error handling is on a branch. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: "Darrick J. Wong" <djwong@kernel.org> Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
This commit is contained in:
parent
ce42b5d375
commit
db8616e276
@ -1484,39 +1484,39 @@ retry:
|
||||
raminlen = max_t(xfs_rtxlen_t, 1, xfs_extlen_to_rtxlen(mp, minlen));
|
||||
error = xfs_rtallocate_extent(ap->tp, rtx, raminlen, ralen, &ralen,
|
||||
ap->wasdel, prod, &rtx);
|
||||
if (!error) {
|
||||
ap->blkno = xfs_rtx_to_rtb(mp, rtx);
|
||||
ap->length = xfs_rtxlen_to_extlen(mp, ralen);
|
||||
xfs_bmap_alloc_account(ap);
|
||||
if (error == -ENOSPC) {
|
||||
if (align > mp->m_sb.sb_rextsize) {
|
||||
/*
|
||||
* We previously enlarged the request length to try to
|
||||
* satisfy an extent size hint. The allocator didn't
|
||||
* return anything, so reset the parameters to the
|
||||
* original values and try again without alignment
|
||||
* criteria.
|
||||
*/
|
||||
ap->offset = orig_offset;
|
||||
ap->length = orig_length;
|
||||
minlen = align = mp->m_sb.sb_rextsize;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
if (!ignore_locality && ap->blkno != 0) {
|
||||
/*
|
||||
* If we can't allocate near a specific rt extent, try
|
||||
* again without locality criteria.
|
||||
*/
|
||||
ignore_locality = true;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
ap->blkno = NULLFSBLOCK;
|
||||
ap->length = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (error != -ENOSPC)
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
if (align > mp->m_sb.sb_rextsize) {
|
||||
/*
|
||||
* We previously enlarged the request length to try to satisfy
|
||||
* an extent size hint. The allocator didn't return anything,
|
||||
* so reset the parameters to the original values and try again
|
||||
* without alignment criteria.
|
||||
*/
|
||||
ap->offset = orig_offset;
|
||||
ap->length = orig_length;
|
||||
minlen = align = mp->m_sb.sb_rextsize;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
if (!ignore_locality && ap->blkno != 0) {
|
||||
/*
|
||||
* If we can't allocate near a specific rt extent, try again
|
||||
* without locality criteria.
|
||||
*/
|
||||
ignore_locality = true;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
ap->blkno = NULLFSBLOCK;
|
||||
ap->length = 0;
|
||||
ap->blkno = xfs_rtx_to_rtb(mp, rtx);
|
||||
ap->length = xfs_rtxlen_to_extlen(mp, ralen);
|
||||
xfs_bmap_alloc_account(ap);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user