]> git.itanic.dy.fi Git - linux-stable/commitdiff
xfs: indicate if xfs_bmap_adjacent changed ap->blkno
authorChristoph Hellwig <hch@lst.de>
Mon, 18 Dec 2023 04:57:24 +0000 (05:57 +0100)
committerChandan Babu R <chandanbabu@kernel.org>
Fri, 22 Dec 2023 05:48:11 +0000 (11:18 +0530)
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>
fs/xfs/libxfs/xfs_bmap.c
fs/xfs/xfs_bmap_util.h

index 396f242e593227925373d7bf36c6063ca14d0260..be7b76ab9fcd2dec4e3b7870b6144c5caf4b62f6 100644 (file)
@@ -3044,7 +3044,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 */
 {
@@ -3079,13 +3080,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 */
@@ -3165,14 +3167,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
index 6888078f5c31e009b8a0f1b91938d3a1381423ce..77ecbb753ef207e2024724ca78d449ad56ae9934 100644 (file)
@@ -47,7 +47,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);