*/
 #define XFS_IEXT_ADD_NOSPLIT_CNT       (1)
 
+/*
+ * Punching out an extent from the middle of an existing extent can cause the
+ * extent count to increase by 1.
+ * i.e. | Old extent | Hole | Old extent |
+ */
+#define XFS_IEXT_PUNCH_HOLE_CNT                (1)
+
 /*
  * Fork handling.
  */
 
        xfs_exntst_t                    state;
        unsigned int                    bui_type;
        int                             whichfork;
+       int                             iext_delta;
        int                             error = 0;
 
        if (!xfs_bui_validate(mp, buip)) {
        xfs_ilock(ip, XFS_ILOCK_EXCL);
        xfs_trans_ijoin(tp, ip, 0);
 
-       if (bui_type == XFS_BMAP_MAP) {
-               error = xfs_iext_count_may_overflow(ip, whichfork,
-                               XFS_IEXT_ADD_NOSPLIT_CNT);
-               if (error)
-                       goto err_cancel;
-       }
+       if (bui_type == XFS_BMAP_MAP)
+               iext_delta = XFS_IEXT_ADD_NOSPLIT_CNT;
+       else
+               iext_delta = XFS_IEXT_PUNCH_HOLE_CNT;
+
+       error = xfs_iext_count_may_overflow(ip, whichfork, iext_delta);
+       if (error)
+               goto err_cancel;
 
        count = bmap->me_len;
        error = xfs_trans_log_finish_bmap_update(tp, budp, bui_type, ip,
 
 
        xfs_trans_ijoin(tp, ip, 0);
 
+       error = xfs_iext_count_may_overflow(ip, XFS_DATA_FORK,
+                       XFS_IEXT_PUNCH_HOLE_CNT);
+       if (error)
+               goto out_trans_cancel;
+
        error = xfs_bunmapi(tp, ip, startoffset_fsb, len_fsb, 0, 2, done);
        if (error)
                goto out_trans_cancel;
        xfs_ilock(ip, XFS_ILOCK_EXCL);
        xfs_trans_ijoin(tp, ip, 0);
 
+       error = xfs_iext_count_may_overflow(ip, XFS_DATA_FORK,
+                       XFS_IEXT_PUNCH_HOLE_CNT);
+       if (error)
+               goto out_trans_cancel;
+
        /*
         * The extent shifting code works on extent granularity. So, if stop_fsb
         * is not the starting block of extent, we need to split the extent at