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

Commit 4e529339 authored by Brian Foster's avatar Brian Foster Committed by Darrick J. Wong
Browse files

xfs: factor out nodiscard helpers



The changes to skip discards of speculative preallocation and
unwritten extents introduced several new wrapper functions through
the bunmapi -> extent free codepath to reduce churn in all of the
associated callers. In several cases, these wrappers simply toggle a
single flag to skip or not skip discards for the resulting blocks.

The explicit _nodiscard() wrappers for such an isolated set of
callers is a bit overkill. Kill off these wrappers and replace with
the calls to the underlying functions in the contexts that need to
control discard behavior. Retain the wrappers that preserve the
original calling conventions to serve the original purpose of
reducing code churn.

This is a refactoring patch and does not change behavior.

Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 67482129
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
@@ -210,17 +210,6 @@ xfs_free_extent(
	return __xfs_free_extent(tp, bno, len, oinfo, type, false);
}

static inline int
xfs_free_extent_nodiscard(
	struct xfs_trans	*tp,
	xfs_fsblock_t		bno,
	xfs_extlen_t		len,
	struct xfs_owner_info	*oinfo,
	enum xfs_ag_resv_type	type)
{
	return __xfs_free_extent(tp, bno, len, oinfo, type, true);
}

int				/* error */
xfs_alloc_lookup_le(
	struct xfs_btree_cur	*cur,	/* btree cursor */
+4 −9
Original line number Diff line number Diff line
@@ -5116,15 +5116,10 @@ xfs_bmap_del_extent_real(
			if (error)
				goto done;
		} else {
			if ((bflags & XFS_BMAPI_NODISCARD) ||
			    (del->br_state == XFS_EXT_UNWRITTEN)) {
				xfs_bmap_add_free_nodiscard(mp, dfops,
					del->br_startblock, del->br_blockcount,
					NULL);
			} else {
				xfs_bmap_add_free(mp, dfops, del->br_startblock,
					del->br_blockcount, NULL);
			}
			__xfs_bmap_add_free(mp, dfops, del->br_startblock,
					del->br_blockcount, NULL,
					(bflags & XFS_BMAPI_NODISCARD) ||
					del->br_state == XFS_EXT_UNWRITTEN);
		}
	}

+0 −11
Original line number Diff line number Diff line
@@ -260,17 +260,6 @@ xfs_bmap_add_free(
	__xfs_bmap_add_free(mp, dfops, bno, len, oinfo, false);
}

static inline void
xfs_bmap_add_free_nodiscard(
	struct xfs_mount		*mp,
	struct xfs_defer_ops		*dfops,
	xfs_fsblock_t			bno,
	xfs_filblks_t			len,
	struct xfs_owner_info		*oinfo)
{
	__xfs_bmap_add_free(mp, dfops, bno, len, oinfo, true);
}

enum xfs_bmap_intent_type {
	XFS_BMAP_MAP = 1,
	XFS_BMAP_UNMAP,
+2 −2
Original line number Diff line number Diff line
@@ -871,8 +871,8 @@ xfs_free_eofblocks(
		 * contents of the file are flushed to disk then the files
		 * may be full of holes (ie NULL files bug).
		 */
		error = xfs_itruncate_extents_nodiscard(&tp, ip, XFS_DATA_FORK,
							XFS_ISIZE(ip));
		error = xfs_itruncate_extents_flags(&tp, ip, XFS_DATA_FORK,
					XFS_ISIZE(ip), XFS_BMAPI_NODISCARD);
		if (error) {
			/*
			 * If we get an error at this point we simply don't
+3 −6
Original line number Diff line number Diff line
@@ -1548,12 +1548,12 @@ xfs_itruncate_clear_reflink_flags(
 * dirty on error so that transactions can be easily aborted if possible.
 */
int
__xfs_itruncate_extents(
xfs_itruncate_extents_flags(
	struct xfs_trans	**tpp,
	struct xfs_inode	*ip,
	int			whichfork,
	xfs_fsize_t		new_size,
	bool			skip_discard)
	int			flags)
{
	struct xfs_mount	*mp = ip->i_mount;
	struct xfs_trans	*tp = *tpp;
@@ -1564,7 +1564,6 @@ __xfs_itruncate_extents(
	xfs_filblks_t		unmap_len;
	int			error = 0;
	int			done = 0;
	int			flags;

	ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
	ASSERT(!atomic_read(&VFS_I(ip)->i_count) ||
@@ -1577,9 +1576,7 @@ __xfs_itruncate_extents(

	trace_xfs_itruncate_extents_start(ip, new_size);

	flags = xfs_bmapi_aflag(whichfork);
	if (skip_discard)
		flags |= XFS_BMAPI_NODISCARD;
	flags |= xfs_bmapi_aflag(whichfork);

	/*
	 * Since it is possible for space to become allocated beyond
Loading