mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 20:46:48 +02:00
xfs: call xfs_bmap_exact_minlen_extent_alloc from xfs_bmap_btalloc
xfs_bmap_exact_minlen_extent_alloc duplicates the args setup in xfs_bmap_btalloc. Switch to call it from xfs_bmap_btalloc after doing the basic setup. 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
b611fddc04
commit
405ee87c69
|
|
@ -3479,28 +3479,17 @@ xfs_bmap_process_allocated_extent(
|
|||
|
||||
static int
|
||||
xfs_bmap_exact_minlen_extent_alloc(
|
||||
struct xfs_bmalloca *ap)
|
||||
struct xfs_bmalloca *ap,
|
||||
struct xfs_alloc_arg *args)
|
||||
{
|
||||
struct xfs_mount *mp = ap->ip->i_mount;
|
||||
struct xfs_alloc_arg args = { .tp = ap->tp, .mp = mp };
|
||||
xfs_fileoff_t orig_offset;
|
||||
xfs_extlen_t orig_length;
|
||||
int error;
|
||||
|
||||
ASSERT(ap->length);
|
||||
|
||||
if (ap->minlen != 1) {
|
||||
ap->blkno = NULLFSBLOCK;
|
||||
ap->length = 0;
|
||||
args->fsbno = NULLFSBLOCK;
|
||||
return 0;
|
||||
}
|
||||
|
||||
orig_offset = ap->offset;
|
||||
orig_length = ap->length;
|
||||
|
||||
args.alloc_minlen_only = 1;
|
||||
|
||||
xfs_bmap_compute_alignments(ap, &args);
|
||||
args->alloc_minlen_only = 1;
|
||||
args->minlen = args->maxlen = ap->minlen;
|
||||
args->total = ap->total;
|
||||
|
||||
/*
|
||||
* Unlike the longest extent available in an AG, we don't track
|
||||
|
|
@ -3510,33 +3499,9 @@ xfs_bmap_exact_minlen_extent_alloc(
|
|||
* we need not be concerned about a drop in performance in
|
||||
* "debug only" code paths.
|
||||
*/
|
||||
ap->blkno = XFS_AGB_TO_FSB(mp, 0, 0);
|
||||
ap->blkno = XFS_AGB_TO_FSB(ap->ip->i_mount, 0, 0);
|
||||
|
||||
args.oinfo = XFS_RMAP_OINFO_SKIP_UPDATE;
|
||||
args.minlen = args.maxlen = ap->minlen;
|
||||
args.total = ap->total;
|
||||
|
||||
args.alignment = 1;
|
||||
args.minalignslop = 0;
|
||||
|
||||
args.minleft = ap->minleft;
|
||||
args.wasdel = ap->wasdel;
|
||||
args.resv = XFS_AG_RESV_NONE;
|
||||
args.datatype = ap->datatype;
|
||||
|
||||
error = xfs_alloc_vextent_first_ag(&args, ap->blkno);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
if (args.fsbno != NULLFSBLOCK) {
|
||||
xfs_bmap_process_allocated_extent(ap, &args, orig_offset,
|
||||
orig_length);
|
||||
} else {
|
||||
ap->blkno = NULLFSBLOCK;
|
||||
ap->length = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return xfs_alloc_vextent_first_ag(args, ap->blkno);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -3795,8 +3760,11 @@ xfs_bmap_btalloc(
|
|||
/* Trim the allocation back to the maximum an AG can fit. */
|
||||
args.maxlen = min(ap->length, mp->m_ag_max_usable);
|
||||
|
||||
if ((ap->datatype & XFS_ALLOC_USERDATA) &&
|
||||
xfs_inode_is_filestream(ap->ip))
|
||||
if (unlikely(XFS_TEST_ERROR(false, mp,
|
||||
XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT)))
|
||||
error = xfs_bmap_exact_minlen_extent_alloc(ap, &args);
|
||||
else if ((ap->datatype & XFS_ALLOC_USERDATA) &&
|
||||
xfs_inode_is_filestream(ap->ip))
|
||||
error = xfs_bmap_btalloc_filestreams(ap, &args, stripe_align);
|
||||
else
|
||||
error = xfs_bmap_btalloc_best_length(ap, &args, stripe_align);
|
||||
|
|
@ -4211,9 +4179,6 @@ xfs_bmapi_allocate(
|
|||
if ((bma->datatype & XFS_ALLOC_USERDATA) &&
|
||||
XFS_IS_REALTIME_INODE(bma->ip))
|
||||
error = xfs_bmap_rtalloc(bma);
|
||||
else if (unlikely(XFS_TEST_ERROR(false, mp,
|
||||
XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT)))
|
||||
error = xfs_bmap_exact_minlen_extent_alloc(bma);
|
||||
else
|
||||
error = xfs_bmap_btalloc(bma);
|
||||
if (error)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user