Commit 05cf492a authored by Dave Chinner's avatar Dave Chinner
Browse files

xfs: use xfs_bmap_longest_free_extent() in filestreams



The code in xfs_bmap_longest_free_extent() is open coded in
xfs_filestream_pick_ag(). Export xfs_bmap_longest_free_extent and
call it from the filestreams code instead.

Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
parent 6b637ad0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3135,7 +3135,7 @@ xfs_bmap_adjacent(
#undef ISVALID
}

static int
int
xfs_bmap_longest_free_extent(
	struct xfs_perag	*pag,
	struct xfs_trans	*tp,
+2 −0
Original line number Diff line number Diff line
@@ -168,6 +168,8 @@ static inline bool xfs_bmap_is_written_extent(struct xfs_bmbt_irec *irec)
#define xfs_valid_startblock(ip, startblock) \
	((startblock) != 0 || XFS_IS_REALTIME_INODE(ip))

int	xfs_bmap_longest_free_extent(struct xfs_perag *pag,
		struct xfs_trans *tp, xfs_extlen_t *blen);
void	xfs_trim_extent(struct xfs_bmbt_irec *irec, xfs_fileoff_t bno,
		xfs_filblks_t len);
unsigned int xfs_bmap_compute_attr_offset(struct xfs_mount *mp);
+8 −14
Original line number Diff line number Diff line
@@ -124,18 +124,15 @@ xfs_filestream_pick_ag(
		trace_xfs_filestream_scan(mp, ip->i_ino, ag);

		pag = xfs_perag_get(mp, ag);

		if (!xfs_perag_initialised_agf(pag)) {
			err = xfs_alloc_read_agf(pag, NULL, trylock, NULL);
		longest = 0;
		err = xfs_bmap_longest_free_extent(pag, NULL, &longest);
		if (err) {
				if (err != -EAGAIN) {
			xfs_perag_put(pag);
			if (err != -EAGAIN)
				return err;
				}
			/* Couldn't lock the AGF, skip this AG. */
			goto next_ag;
		}
		}

		/* Keep track of the AG with the most free blocks. */
		if (pag->pagf_freeblks > maxfree) {
@@ -154,9 +151,6 @@ xfs_filestream_pick_ag(
			goto next_ag;
		}

		longest = xfs_alloc_longest_free_extent(pag,
				xfs_alloc_min_freelist(mp, pag),
				xfs_ag_resv_needed(pag, XFS_AG_RESV_NONE));
		if (((minlen && longest >= minlen) ||
		     (!minlen && pag->pagf_freeblks >= minfree)) &&
		    (!xfs_perag_prefers_metadata(pag) ||