Commit 62c3d249 authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: clean up xfs_rtallocate_extent_exact a bit



Before we start doing more surgery on the rt allocator, let's clean up
the exact allocator so that it doesn't change its arguments and uses the
helper introduced in the previous patch.

Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent e6a74dcf
Loading
Loading
Loading
Loading
+21 −20
Original line number Diff line number Diff line
@@ -338,10 +338,10 @@ xfs_rtallocate_extent_exact(
	xfs_rtxlen_t		prod,	/* extent product factor */
	xfs_rtxnum_t		*rtx)	/* out: start rtext allocated */
{
	int			error;
	xfs_rtxlen_t		i;	/* extent length trimmed due to prod */
	int			isfree;	/* extent is free */
	xfs_rtxnum_t		next;	/* next rtext to try (dummy) */
	xfs_rtxlen_t		alloclen; /* candidate length */
	int			isfree;	/* extent is free */
	int			error;

	ASSERT(minlen % prod == 0);
	ASSERT(maxlen % prod == 0);
@@ -352,25 +352,26 @@ xfs_rtallocate_extent_exact(
	if (error)
		return error;

	if (!isfree) {
	if (isfree) {
		/* start to maxlen is all free; allocate it. */
		*len = maxlen;
		*rtx = start;
		return 0;
	}

	/*
	 * If not, allocate what there is, if it's at least minlen.
	 */
		maxlen = next - start;
		if (maxlen < minlen)
	alloclen = next - start;
	if (alloclen < minlen)
		return -ENOSPC;

		/*
		 * Trim off tail of extent, if prod is specified.
		 */
		if (prod > 1 && (i = maxlen % prod)) {
			maxlen -= i;
			if (maxlen < minlen)
	/* Ensure alloclen is a multiple of prod. */
	alloclen = xfs_rtalloc_align_len(alloclen, prod);
	if (alloclen < minlen)
		return -ENOSPC;
		}
	}

	*len = maxlen;
	*len = alloclen;
	*rtx = start;
	return 0;
}