]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
xfs: treat idx as a cursor in xfs_bmap_collapse_extents
authorChristoph Hellwig <hch@lst.de>
Fri, 3 Nov 2017 17:34:41 +0000 (10:34 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Mon, 6 Nov 2017 19:53:39 +0000 (11:53 -0800)
Stop poking before and after the index and just increment or decrement
it while doing our operations on it to prepare for a new extent list
implementation.

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>
fs/xfs/libxfs/xfs_bmap.c

index f64b6b74daa9e2e0eb6e36968d52892729bfe313..62270b871d0653006a881144fe5d08f2ac1e3eaf 100644 (file)
@@ -5517,7 +5517,7 @@ xfs_bmse_merge(
        struct xfs_inode                *ip,
        int                             whichfork,
        xfs_fileoff_t                   shift,          /* shift fsb */
-       int                             current_ext,    /* idx of gotp */
+       int                             *current_ext,   /* idx of gotp */
        struct xfs_bmbt_irec            *got,           /* extent to shift */
        struct xfs_bmbt_irec            *left,          /* preceding extent */
        struct xfs_btree_cur            *cur,
@@ -5572,9 +5572,10 @@ xfs_bmse_merge(
                return error;
 
 done:
+       xfs_iext_remove(ip, *current_ext, 1, 0);
+       --*current_ext;
        xfs_iext_update_extent(ip, xfs_bmap_fork_to_state(whichfork),
-                       current_ext - 1, &new);
-       xfs_iext_remove(ip, current_ext, 1, 0);
+                       *current_ext, &new);
 
        /* update reverse mapping. rmap functions merge the rmaps for us */
        error = xfs_rmap_unmap_extent(mp, dfops, ip, whichfork, got);
@@ -5688,16 +5689,10 @@ xfs_bmap_collapse_extents(
 
                if (xfs_bmse_can_merge(&prev, &got, offset_shift_fsb)) {
                        error = xfs_bmse_merge(ip, whichfork, offset_shift_fsb,
-                                       current_ext, &got, &prev, cur,
+                                       &current_ext, &got, &prev, cur,
                                        &logflags, dfops);
                        if (error)
                                goto del_cursor;
-
-                       /* update got after merge */
-                       if (!xfs_iext_get_extent(ifp, current_ext, &got)) {
-                               *done = true;
-                               goto del_cursor;
-                       }
                        goto done;
                }
        } else {
@@ -5712,12 +5707,12 @@ xfs_bmap_collapse_extents(
        if (error)
                goto del_cursor;
 
+done:
        if (!xfs_iext_get_extent(ifp, ++current_ext, &got)) {
                 *done = true;
                 goto del_cursor;
        }
 
-done:
        *next_fsb = got.br_startoff;
 del_cursor:
        if (cur)