]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: indicate if xfs_bmap_adjacent changed ap->blkno
authorChristoph Hellwig <hch@lst.de>
Mon, 15 Apr 2024 23:07:41 +0000 (16:07 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 17 Apr 2024 21:06:26 +0000 (14:06 -0700)
Source kernel commit: 676544c27e710aee7f8357f57abd348d98b1ccd4

Add a return value to xfs_bmap_adjacent to indicate if it did change
ap->blkno or not.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
Reviewed-by: Bill O'Donnell <bodonnel@redhat.com>
libxfs/libxfs_priv.h
libxfs/xfs_bmap.c

index 28ee192509c75c92b4a6d0be597b57353b301a47..705b66bed13f0ee8b8cf63df54f84a54e1607d3c 100644 (file)
@@ -565,7 +565,7 @@ int xfs_bmap_extsize_align(struct xfs_mount *mp, struct xfs_bmbt_irec *gotp,
                           struct xfs_bmbt_irec *prevp, xfs_extlen_t extsz,
                           int rt, int eof, int delay, int convert,
                           xfs_fileoff_t *offp, xfs_extlen_t *lenp);
-void xfs_bmap_adjacent(struct xfs_bmalloca *ap);
+bool xfs_bmap_adjacent(struct xfs_bmalloca *ap);
 int xfs_bmap_last_extent(struct xfs_trans *tp, struct xfs_inode *ip,
                         int whichfork, struct xfs_bmbt_irec *rec,
                         int *is_empty);
index 4f6bd8dff47e594f72f67ad230f05e8153354717..b977032d82443e992ecee305518d11054254cf68 100644 (file)
@@ -3038,7 +3038,8 @@ xfs_bmap_extsize_align(
 
 #define XFS_ALLOC_GAP_UNITS    4
 
-void
+/* returns true if ap->blkno was modified */
+bool
 xfs_bmap_adjacent(
        struct xfs_bmalloca     *ap)    /* bmap alloc argument struct */
 {
@@ -3073,13 +3074,14 @@ xfs_bmap_adjacent(
                if (adjust &&
                    ISVALID(ap->blkno + adjust, ap->prev.br_startblock))
                        ap->blkno += adjust;
+               return true;
        }
        /*
         * If not at eof, then compare the two neighbor blocks.
         * Figure out whether either one gives us a good starting point,
         * and pick the better one.
         */
-       else if (!ap->eof) {
+       if (!ap->eof) {
                xfs_fsblock_t   gotbno;         /* right side block number */
                xfs_fsblock_t   gotdiff=0;      /* right side difference */
                xfs_fsblock_t   prevbno;        /* left side block number */
@@ -3159,14 +3161,21 @@ xfs_bmap_adjacent(
                 * If both valid, pick the better one, else the only good
                 * one, else ap->blkno is already set (to 0 or the inode block).
                 */
-               if (prevbno != NULLFSBLOCK && gotbno != NULLFSBLOCK)
+               if (prevbno != NULLFSBLOCK && gotbno != NULLFSBLOCK) {
                        ap->blkno = prevdiff <= gotdiff ? prevbno : gotbno;
-               else if (prevbno != NULLFSBLOCK)
+                       return true;
+               }
+               if (prevbno != NULLFSBLOCK) {
                        ap->blkno = prevbno;
-               else if (gotbno != NULLFSBLOCK)
+                       return true;
+               }
+               if (gotbno != NULLFSBLOCK) {
                        ap->blkno = gotbno;
+                       return true;
+               }
        }
 #undef ISVALID
+       return false;
 }
 
 int