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: Dave Chinner <dchinner@redhat.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
parent
6b637ad0c7
commit
05cf492a8d
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -124,17 +124,14 @@ 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);
|
||||
if (err) {
|
||||
if (err != -EAGAIN) {
|
||||
xfs_perag_put(pag);
|
||||
return err;
|
||||
}
|
||||
/* Couldn't lock the AGF, skip this AG. */
|
||||
goto next_ag;
|
||||
}
|
||||
longest = 0;
|
||||
err = xfs_bmap_longest_free_extent(pag, NULL, &longest);
|
||||
if (err) {
|
||||
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. */
|
||||
@ -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) ||
|
||||
|
Loading…
x
Reference in New Issue
Block a user