]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: pass a struct xfs_bmbt_irec to xfs_bmbt_lookup_eq
authorChristoph Hellwig <hch@lst.de>
Fri, 17 Nov 2017 04:11:31 +0000 (22:11 -0600)
committerEric Sandeen <sandeen@redhat.com>
Fri, 17 Nov 2017 04:11:31 +0000 (22:11 -0600)
Source kernel commit: e16cf9b03cee4d2797695d4ca691e854c7a24864

Now that we've massaged the callers into the right form we can always
pass the actual extent record instead of the individual fields.

As an additional benefit the btree cursor will now be prepoulated with
the correct extent state instead of having to fix it up later.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_bmap.c

index a4985d39ecf422101d4cdf165c235a77d978a149..a2d7e4049123bf109fb1394d66c5701ccfb45f20 100644 (file)
@@ -103,14 +103,10 @@ xfs_bmap_compute_maxlevels(
 STATIC int                             /* error */
 xfs_bmbt_lookup_eq(
        struct xfs_btree_cur    *cur,
-       xfs_fileoff_t           off,
-       xfs_fsblock_t           bno,
-       xfs_filblks_t           len,
+       struct xfs_bmbt_irec    *irec,
        int                     *stat)  /* success/failure */
 {
-       cur->bc_rec.b.br_startoff = off;
-       cur->bc_rec.b.br_startblock = bno;
-       cur->bc_rec.b.br_blockcount = len;
+       cur->bc_rec.b = *irec;
        return xfs_btree_lookup(cur, XFS_LOOKUP_EQ, stat);
 }
 
@@ -1688,9 +1684,7 @@ xfs_bmap_add_extent_delay_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       error = xfs_bmbt_lookup_eq(bma->cur, RIGHT.br_startoff,
-                                       RIGHT.br_startblock,
-                                       RIGHT.br_blockcount, &i);
+                       error = xfs_bmbt_lookup_eq(bma->cur, &RIGHT, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -1726,9 +1720,7 @@ xfs_bmap_add_extent_delay_real(
                        rval = XFS_ILOG_DEXT;
                else {
                        rval = 0;
-                       error = xfs_bmbt_lookup_eq(bma->cur, old.br_startoff,
-                                       old.br_startblock, old.br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(bma->cur, &old, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -1754,9 +1746,7 @@ xfs_bmap_add_extent_delay_real(
                        rval = XFS_ILOG_DEXT;
                else {
                        rval = 0;
-                       error = xfs_bmbt_lookup_eq(bma->cur, RIGHT.br_startoff,
-                                       RIGHT.br_startblock,
-                                       RIGHT.br_blockcount, &i);
+                       error = xfs_bmbt_lookup_eq(bma->cur, &RIGHT, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -1783,13 +1773,10 @@ xfs_bmap_add_extent_delay_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       error = xfs_bmbt_lookup_eq(bma->cur, new->br_startoff,
-                                       new->br_startblock, new->br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(bma->cur, new, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
-                       bma->cur->bc_rec.b.br_state = XFS_EXT_NORM;
                        error = xfs_btree_insert(bma->cur, &i);
                        if (error)
                                goto done;
@@ -1823,9 +1810,7 @@ xfs_bmap_add_extent_delay_real(
                        rval = XFS_ILOG_DEXT;
                else {
                        rval = 0;
-                       error = xfs_bmbt_lookup_eq(bma->cur, old.br_startoff,
-                                       old.br_startblock, old.br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(bma->cur, &old, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -1848,13 +1833,10 @@ xfs_bmap_add_extent_delay_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       error = xfs_bmbt_lookup_eq(bma->cur, new->br_startoff,
-                                       new->br_startblock, new->br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(bma->cur, new, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
-                       bma->cur->bc_rec.b.br_state = XFS_EXT_NORM;
                        error = xfs_btree_insert(bma->cur, &i);
                        if (error)
                                goto done;
@@ -1901,9 +1883,7 @@ xfs_bmap_add_extent_delay_real(
                        rval = XFS_ILOG_DEXT;
                else {
                        rval = 0;
-                       error = xfs_bmbt_lookup_eq(bma->cur, old.br_startoff,
-                                       old.br_startblock,
-                                       old.br_blockcount, &i);
+                       error = xfs_bmbt_lookup_eq(bma->cur, &old, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -1936,13 +1916,10 @@ xfs_bmap_add_extent_delay_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       error = xfs_bmbt_lookup_eq(bma->cur, new->br_startoff,
-                                       new->br_startblock, new->br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(bma->cur, new, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
-                       bma->cur->bc_rec.b.br_state = XFS_EXT_NORM;
                        error = xfs_btree_insert(bma->cur, &i);
                        if (error)
                                goto done;
@@ -2024,13 +2001,10 @@ xfs_bmap_add_extent_delay_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       error = xfs_bmbt_lookup_eq(bma->cur, new->br_startoff,
-                                       new->br_startblock, new->br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(bma->cur, new, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
-                       bma->cur->bc_rec.b.br_state = XFS_EXT_NORM;
                        error = xfs_btree_insert(bma->cur, &i);
                        if (error)
                                goto done;
@@ -2236,9 +2210,8 @@ xfs_bmap_add_extent_unwritten_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       if ((error = xfs_bmbt_lookup_eq(cur, RIGHT.br_startoff,
-                                       RIGHT.br_startblock,
-                                       RIGHT.br_blockcount, &i)))
+                       error = xfs_bmbt_lookup_eq(cur, &RIGHT, &i);
+                       if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
                        if ((error = xfs_btree_delete(cur, &i)))
@@ -2278,9 +2251,8 @@ xfs_bmap_add_extent_unwritten_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       if ((error = xfs_bmbt_lookup_eq(cur, PREV.br_startoff,
-                                       PREV.br_startblock, PREV.br_blockcount,
-                                       &i)))
+                       error = xfs_bmbt_lookup_eq(cur, &PREV, &i);
+                       if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
                        if ((error = xfs_btree_delete(cur, &i)))
@@ -2313,9 +2285,8 @@ xfs_bmap_add_extent_unwritten_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       if ((error = xfs_bmbt_lookup_eq(cur, RIGHT.br_startoff,
-                                       RIGHT.br_startblock,
-                                       RIGHT.br_blockcount, &i)))
+                       error = xfs_bmbt_lookup_eq(cur, &RIGHT, &i);
+                       if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
                        if ((error = xfs_btree_delete(cur, &i)))
@@ -2345,9 +2316,8 @@ xfs_bmap_add_extent_unwritten_real(
                        rval = XFS_ILOG_DEXT;
                else {
                        rval = 0;
-                       if ((error = xfs_bmbt_lookup_eq(cur, new->br_startoff,
-                                       new->br_startblock, new->br_blockcount,
-                                       &i)))
+                       error = xfs_bmbt_lookup_eq(cur, new, &i);
+                       if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
                        error = xfs_bmbt_update(cur, &PREV);
@@ -2380,9 +2350,7 @@ xfs_bmap_add_extent_unwritten_real(
                        rval = XFS_ILOG_DEXT;
                else {
                        rval = 0;
-                       error = xfs_bmbt_lookup_eq(cur, old.br_startoff,
-                                       old.br_startblock, old.br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -2418,9 +2386,7 @@ xfs_bmap_add_extent_unwritten_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       error = xfs_bmbt_lookup_eq(cur, old.br_startoff,
-                                       old.br_startblock, old.br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -2458,9 +2424,7 @@ xfs_bmap_add_extent_unwritten_real(
                        rval = XFS_ILOG_DEXT;
                else {
                        rval = 0;
-                       error = xfs_bmbt_lookup_eq(cur, old.br_startoff,
-                                       old.br_startblock, old.br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -2496,21 +2460,17 @@ xfs_bmap_add_extent_unwritten_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       error = xfs_bmbt_lookup_eq(cur, old.br_startoff,
-                                       old.br_startblock, old.br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
                        error = xfs_bmbt_update(cur, &PREV);
                        if (error)
                                goto done;
-                       if ((error = xfs_bmbt_lookup_eq(cur, new->br_startoff,
-                                       new->br_startblock, new->br_blockcount,
-                                       &i)))
+                       error = xfs_bmbt_lookup_eq(cur, new, &i);
+                       if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
-                       cur->bc_rec.b.br_state = new->br_state;
                        if ((error = xfs_btree_insert(cur, &i)))
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -2545,9 +2505,7 @@ xfs_bmap_add_extent_unwritten_real(
                        rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
                else {
                        rval = XFS_ILOG_CORE;
-                       error = xfs_bmbt_lookup_eq(cur, old.br_startoff,
-                                       old.br_startblock, old.br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -2565,13 +2523,11 @@ xfs_bmap_add_extent_unwritten_real(
                         * we are about to insert as we can't trust it after
                         * the previous insert.
                         */
-                       if ((error = xfs_bmbt_lookup_eq(cur, new->br_startoff,
-                                       new->br_startblock, new->br_blockcount,
-                                       &i)))
+                       error = xfs_bmbt_lookup_eq(cur, new, &i);
+                       if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
                        /* new middle extent - newext */
-                       cur->bc_rec.b.br_state = new->br_state;
                        if ((error = xfs_btree_insert(cur, &i)))
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -2880,9 +2836,7 @@ xfs_bmap_add_extent_hole_real(
                        rval = XFS_ILOG_CORE | xfs_ilog_fext(whichfork);
                } else {
                        rval = XFS_ILOG_CORE;
-                       error = xfs_bmbt_lookup_eq(cur, right.br_startoff,
-                                       right.br_startblock, right.br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(cur, &right, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -2917,9 +2871,7 @@ xfs_bmap_add_extent_hole_real(
                        rval = xfs_ilog_fext(whichfork);
                } else {
                        rval = 0;
-                       error = xfs_bmbt_lookup_eq(cur, old.br_startoff,
-                                       old.br_startblock, old.br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -2947,9 +2899,7 @@ xfs_bmap_add_extent_hole_real(
                        rval = xfs_ilog_fext(whichfork);
                } else {
                        rval = 0;
-                       error = xfs_bmbt_lookup_eq(cur, old.br_startoff,
-                                       old.br_startblock, old.br_blockcount,
-                                       &i);
+                       error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -2972,14 +2922,10 @@ xfs_bmap_add_extent_hole_real(
                        rval = XFS_ILOG_CORE | xfs_ilog_fext(whichfork);
                } else {
                        rval = XFS_ILOG_CORE;
-                       error = xfs_bmbt_lookup_eq(cur,
-                                       new->br_startoff,
-                                       new->br_startblock,
-                                       new->br_blockcount, &i);
+                       error = xfs_bmbt_lookup_eq(cur, new, &i);
                        if (error)
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
-                       cur->bc_rec.b.br_state = new->br_state;
                        error = xfs_btree_insert(cur, &i);
                        if (error)
                                goto done;
@@ -5090,8 +5036,7 @@ xfs_bmap_del_extent_real(
 
        del_endblock = del->br_startblock + del->br_blockcount;
        if (cur) {
-               error = xfs_bmbt_lookup_eq(cur, got.br_startoff,
-                               got.br_startblock, got.br_blockcount, &i);
+               error = xfs_bmbt_lookup_eq(cur, &got, &i);
                if (error)
                        goto done;
                XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -5194,9 +5139,7 @@ xfs_bmap_del_extent_real(
                                 * Reset the cursor, don't trust it after any
                                 * insert operation.
                                 */
-                               error = xfs_bmbt_lookup_eq(cur, got.br_startoff,
-                                               got.br_startblock,
-                                               got.br_blockcount, &i);
+                               error = xfs_bmbt_lookup_eq(cur, &got, &i);
                                if (error)
                                        goto done;
                                XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
@@ -5724,8 +5667,7 @@ xfs_bmse_merge(
        }
 
        /* lookup and remove the extent to merge */
-       error = xfs_bmbt_lookup_eq(cur, got->br_startoff, got->br_startblock,
-                                  got->br_blockcount, &i);
+       error = xfs_bmbt_lookup_eq(cur, got, &i);
        if (error)
                return error;
        XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
@@ -5736,8 +5678,7 @@ xfs_bmse_merge(
        XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
 
        /* lookup and update size of the previous extent */
-       error = xfs_bmbt_lookup_eq(cur, left->br_startoff, left->br_startblock,
-                                  left->br_blockcount, &i);
+       error = xfs_bmbt_lookup_eq(cur, left, &i);
        if (error)
                return error;
        XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
@@ -5853,8 +5794,7 @@ update_current_ext:
        new.br_startoff = startoff;
 
        if (cur) {
-               error = xfs_bmbt_lookup_eq(cur, got->br_startoff,
-                               got->br_startblock, got->br_blockcount, &i);
+               error = xfs_bmbt_lookup_eq(cur, got, &i);
                if (error)
                        return error;
                XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
@@ -6106,10 +6046,7 @@ xfs_bmap_split_extent_at(
                cur->bc_private.b.firstblock = *firstfsb;
                cur->bc_private.b.dfops = dfops;
                cur->bc_private.b.flags = 0;
-               error = xfs_bmbt_lookup_eq(cur, got.br_startoff,
-                               got.br_startblock,
-                               got.br_blockcount,
-                               &i);
+               error = xfs_bmbt_lookup_eq(cur, &got, &i);
                if (error)
                        goto del_cursor;
                XFS_WANT_CORRUPTED_GOTO(mp, i == 1, del_cursor);
@@ -6133,14 +6070,10 @@ xfs_bmap_split_extent_at(
                           XFS_IFORK_NEXTENTS(ip, whichfork) + 1);
 
        if (cur) {
-               error = xfs_bmbt_lookup_eq(cur, new.br_startoff,
-                               new.br_startblock, new.br_blockcount,
-                               &i);
+               error = xfs_bmbt_lookup_eq(cur, &new, &i);
                if (error)
                        goto del_cursor;
                XFS_WANT_CORRUPTED_GOTO(mp, i == 0, del_cursor);
-               cur->bc_rec.b.br_state = new.br_state;
-
                error = xfs_btree_insert(cur, &i);
                if (error)
                        goto del_cursor;