From: Dave Chinner Date: Sun, 12 Feb 2023 22:14:55 +0000 (+1100) Subject: xfs: use xfs_bmap_longest_free_extent() in filestreams X-Git-Tag: v6.6.7~3376^2~2^2~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=05cf492a8d01f48d4b8d8f0b93f2d75de7349f12;p=platform%2Fkernel%2Flinux-starfive.git 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 Reviewed-by: Darrick J. Wong --- diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 8939817..16628fd 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -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, diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h index 524912f27..b52cfdc 100644 --- a/fs/xfs/libxfs/xfs_bmap.h +++ b/fs/xfs/libxfs/xfs_bmap.h @@ -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); diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c index 7e8b25a..2eb7020 100644 --- a/fs/xfs/xfs_filestream.c +++ b/fs/xfs/xfs_filestream.c @@ -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) ||