Removing an initial range of source/donor file's extent and adding a new
extent (from donor/source file) in its place will cause extent count to
increase by 1.
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
  */
 #define XFS_IEXT_REFLINK_END_COW_CNT   (2)
 
+/*
+ * Removing an initial range of source/donor file's extent and adding a new
+ * extent (from donor/source file) in its place will cause extent count to
+ * increase by 1.
+ */
+#define XFS_IEXT_SWAP_RMAP_CNT         (1)
+
 /*
  * Fork handling.
  */
 
                                        irec.br_blockcount);
                        trace_xfs_swap_extent_rmap_remap_piece(tip, &uirec);
 
+                       if (xfs_bmap_is_real_extent(&uirec)) {
+                               error = xfs_iext_count_may_overflow(ip,
+                                               XFS_DATA_FORK,
+                                               XFS_IEXT_SWAP_RMAP_CNT);
+                               if (error)
+                                       goto out;
+                       }
+
+                       if (xfs_bmap_is_real_extent(&irec)) {
+                               error = xfs_iext_count_may_overflow(tip,
+                                               XFS_DATA_FORK,
+                                               XFS_IEXT_SWAP_RMAP_CNT);
+                               if (error)
+                                       goto out;
+                       }
+
                        /* Remove the mapping from the donor file. */
                        xfs_bmap_unmap_extent(tp, tip, &uirec);