Commit 405ee87c authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Carlos Maiolino
Browse files

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: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
Signed-off-by: default avatarCarlos Maiolino <cem@kernel.org>
parent b611fddc
Loading
Loading
Loading
Loading
+13 −48
Original line number Diff line number Diff line
@@ -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,7 +3760,10 @@ 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) &&
	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
@@ -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)