xfs: use xfs_iext_*_extent helpers in xfs_bmap_split_extent_at
authorChristoph Hellwig <hch@lst.de>
Tue, 29 Aug 2017 22:44:13 +0000 (15:44 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Fri, 1 Sep 2017 20:08:25 +0000 (13:08 -0700)
This abstracts the function away from details of the low-level extent
list implementation.

Signed-off-by: Christoph Hellwig <hch@lst.de>
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 88beac28258ee626a145b6e53c933506bbf12664..9b877024c804d96b18c850eeda4108532d572c04 100644 (file)
@@ -6253,7 +6253,6 @@ xfs_bmap_split_extent_at(
 {
        int                             whichfork = XFS_DATA_FORK;
        struct xfs_btree_cur            *cur = NULL;
-       struct xfs_bmbt_rec_host        *gotp;
        struct xfs_bmbt_irec            got;
        struct xfs_bmbt_irec            new; /* split extent */
        struct xfs_mount                *mp = ip->i_mount;
@@ -6285,21 +6284,10 @@ xfs_bmap_split_extent_at(
        }
 
        /*
-        * gotp can be null in 2 cases: 1) if there are no extents
-        * or 2) split_fsb lies in a hole beyond which there are
-        * no extents. Either way, we are done.
+        * If there are not extents, or split_fsb lies in a hole we are done.
         */
-       gotp = xfs_iext_bno_to_ext(ifp, split_fsb, &current_ext);
-       if (!gotp)
-               return 0;
-
-       xfs_bmbt_get_all(gotp, &got);
-
-       /*
-        * Check split_fsb lies in a hole or the start boundary offset
-        * of the extent.
-        */
-       if (got.br_startoff >= split_fsb)
+       if (!xfs_iext_lookup_extent(ip, ifp, split_fsb, &current_ext, &got) ||
+           got.br_startoff >= split_fsb)
                return 0;
 
        gotblkcnt = split_fsb - got.br_startoff;
@@ -6322,8 +6310,8 @@ xfs_bmap_split_extent_at(
                XFS_WANT_CORRUPTED_GOTO(mp, i == 1, del_cursor);
        }
 
-       xfs_bmbt_set_blockcount(gotp, gotblkcnt);
        got.br_blockcount = gotblkcnt;
+       xfs_iext_update_extent(ifp, current_ext, &got);
 
        logflags = XFS_ILOG_CORE;
        if (cur) {