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

Commit e0c3da5d authored by Dave Chinner's avatar Dave Chinner Committed by Alex Elder
Browse files

xfs: move lastx and nallocs into bmalloca



Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAlex Elder <aelder@sgi.com>
parent 29c8d17a
Loading
Loading
Loading
Loading
+21 −26
Original line number Diff line number Diff line
@@ -4607,9 +4607,7 @@ xfs_bmapi_delay(
STATIC int
xfs_bmapi_allocate(
	struct xfs_bmalloca	*bma,
	xfs_extnum_t		*lastx,
	int			flags,
	int			*nallocs,
	int			*logflags)
{
	struct xfs_mount	*mp = bma->ip->i_mount;
@@ -4628,8 +4626,8 @@ xfs_bmapi_allocate(
	if (bma->wasdel) {
		bma->length = (xfs_extlen_t)bma->got.br_blockcount;
		bma->offset = bma->got.br_startoff;
		if (*lastx != NULLEXTNUM && *lastx) {
			xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *lastx - 1),
		if (bma->idx != NULLEXTNUM && bma->idx) {
			xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma->idx - 1),
					 &bma->prev);
		}
	} else {
@@ -4680,7 +4678,7 @@ xfs_bmapi_allocate(
	 * Bump the number of extents we've allocated
	 * in this call.
	 */
	(*nallocs)++;
	bma->nallocs++;

	if (bma->cur)
		bma->cur->bc_private.b.flags =
@@ -4700,13 +4698,14 @@ xfs_bmapi_allocate(
		bma->got.br_state = XFS_EXT_UNWRITTEN;

	if (bma->wasdel) {
		error = xfs_bmap_add_extent_delay_real(bma->tp, bma->ip, lastx,
				&bma->cur, &bma->got, bma->firstblock,
				bma->flist, logflags);
		error = xfs_bmap_add_extent_delay_real(bma->tp, bma->ip,
				&bma->idx, &bma->cur, &bma->got,
				bma->firstblock, bma->flist, logflags);
	} else {
		error = xfs_bmap_add_extent_hole_real(bma->tp, bma->ip, lastx,
				&bma->cur, &bma->got, bma->firstblock,
				bma->flist, logflags, whichfork);
		error = xfs_bmap_add_extent_hole_real(bma->tp, bma->ip,
				&bma->idx, &bma->cur, &bma->got,
				bma->firstblock, bma->flist, logflags,
				whichfork);
	}

	if (error)
@@ -4717,7 +4716,7 @@ xfs_bmapi_allocate(
	 * or xfs_bmap_add_extent_hole_real might have merged it into one of
	 * the neighbouring ones.
	 */
	xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *lastx), &bma->got);
	xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma->idx), &bma->got);

	ASSERT(bma->got.br_startoff <= bma->offset);
	ASSERT(bma->got.br_startoff + bma->got.br_blockcount >=
@@ -4732,7 +4731,6 @@ xfs_bmapi_convert_unwritten(
	struct xfs_bmalloca	*bma,
	struct xfs_bmbt_irec	*mval,
	xfs_filblks_t		len,
	xfs_extnum_t		*lastx,
	int			flags,
	int			*logflags)
{
@@ -4767,7 +4765,7 @@ xfs_bmapi_convert_unwritten(
	mval->br_state = (mval->br_state == XFS_EXT_UNWRITTEN)
				? XFS_EXT_NORM : XFS_EXT_UNWRITTEN;

	error = xfs_bmap_add_extent_unwritten_real(bma->tp, bma->ip, lastx,
	error = xfs_bmap_add_extent_unwritten_real(bma->tp, bma->ip, &bma->idx,
			&bma->cur, mval, bma->firstblock, bma->flist, logflags);
	if (error)
		return error;
@@ -4777,7 +4775,7 @@ xfs_bmapi_convert_unwritten(
	 * xfs_bmap_add_extent_unwritten_real might have merged it into one
	 * of the neighbouring ones.
	 */
	xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *lastx), &bma->got);
	xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma->idx), &bma->got);

	/*
	 * We may have combined previously unwritten space with written space,
@@ -4820,10 +4818,8 @@ xfs_bmapi_write(
	xfs_fileoff_t		end;		/* end of mapped file region */
	int			eof;		/* after the end of extents */
	int			error;		/* error return */
	xfs_extnum_t		lastx;		/* last useful extent number */
	int			logflags;	/* flags for transaction logging */
	int			n;		/* current extent index */
	int			nallocs;	/* number of extents alloc'd */
	xfs_fileoff_t		obno;		/* old block number (offset) */
	int			tmp_logflags;	/* temp flags holder */
	int			whichfork;	/* data or attr fork */
@@ -4871,7 +4867,6 @@ xfs_bmapi_write(
	XFS_STATS_INC(xs_blk_mapw);

	logflags = 0;
	nallocs = 0;

	if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL) {
		error = xfs_bmap_local_to_extents(tp, ip, firstblock, total,
@@ -4895,7 +4890,7 @@ xfs_bmapi_write(
			goto error0;
	}

	xfs_bmap_search_extents(ip, bno, whichfork, &eof, &lastx, &bma.got,
	xfs_bmap_search_extents(ip, bno, whichfork, &eof, &bma.idx, &bma.got,
				&bma.prev);
	n = 0;
	end = bno + len;
@@ -4923,8 +4918,7 @@ xfs_bmapi_write(
			bma.length = len;
			bma.offset = bno;

			error = xfs_bmapi_allocate(&bma, &lastx, flags,
					&nallocs, &tmp_logflags);
			error = xfs_bmapi_allocate(&bma, flags, &tmp_logflags);
			logflags |= tmp_logflags;
			if (error)
				goto error0;
@@ -4937,7 +4931,7 @@ xfs_bmapi_write(
							end, n, flags);

		/* Execute unwritten extent conversion if necessary */
		error = xfs_bmapi_convert_unwritten(&bma, mval, len, &lastx,
		error = xfs_bmapi_convert_unwritten(&bma, mval, len,
						    flags, &tmp_logflags);
		logflags |= tmp_logflags;
		if (error == EAGAIN)
@@ -4953,14 +4947,15 @@ xfs_bmapi_write(
		 * XFS_BMAP_MAX_NMAP extents no matter what.  Otherwise
		 * the transaction may get too big.
		 */
		if (bno >= end || n >= *nmap || nallocs >= *nmap)
		if (bno >= end || n >= *nmap || bma.nallocs >= *nmap)
			break;

		/* Else go on to the next record. */
		bma.prev = bma.got;
		if (++lastx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t))
			xfs_bmbt_get_all(xfs_iext_get_ext(ifp, lastx), &bma.got);
		else
		if (++bma.idx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t)) {
			xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma.idx),
					 &bma.got);
		} else
			eof = 1;
	}
	*nmap = n;
+2 −0
Original line number Diff line number Diff line
@@ -121,6 +121,8 @@ typedef struct xfs_bmalloca {
	xfs_fsblock_t		blkno;	/* starting block of new extent */

	struct xfs_btree_cur	*cur;	/* btree cursor */
	xfs_extnum_t		idx;	/* current extent index */
	int			nallocs;/* number of extents alloc'd */

	xfs_extlen_t		total;	/* total blocks needed for xaction */
	xfs_extlen_t		minlen;	/* minimum allocation size (blocks) */