Re: [PATCH V7 08/14] xfs: Check for extent overflow when remapping an extent

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 10/18/20 11:40 PM, Chandan Babu R wrote:
Remapping an extent involves unmapping the existing extent and mapping
in the new extent. When unmapping, an extent containing the entire unmap
range can be split into two extents,
i.e. | Old extent | hole | Old extent |
Hence extent count increases by 1.

Mapping in the new extent into the destination file can increase the
extent count by 1.

Following the previous discussion threads, I do think that's easier to look at. I know it's more LOC, but less jumping around to understand what it means :-)

Reviewed-by: Allison Henderson <allison.henderson@xxxxxxxxxx>
Signed-off-by: Chandan Babu R <chandanrlinux@xxxxxxxxx>
---
  fs/xfs/xfs_reflink.c | 11 +++++++++++
  1 file changed, 11 insertions(+)

diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c
index 4f0198f636ad..856fe755a5e9 100644
--- a/fs/xfs/xfs_reflink.c
+++ b/fs/xfs/xfs_reflink.c
@@ -1006,6 +1006,7 @@ xfs_reflink_remap_extent(
  	unsigned int		resblks;
  	bool			smap_real;
  	bool			dmap_written = xfs_bmap_is_written_extent(dmap);
+	int			iext_delta = 0;
  	int			nimaps;
  	int			error;
@@ -1099,6 +1100,16 @@ xfs_reflink_remap_extent(
  			goto out_cancel;
  	}
+ if (smap_real)
+		++iext_delta;
+
+	if (dmap_written)
+		++iext_delta;
+
+	error = xfs_iext_count_may_overflow(ip, XFS_DATA_FORK, iext_delta);
+	if (error)
+		goto out_cancel;
+
  	if (smap_real) {
  		/*
  		 * If the extent we're unmapping is backed by storage (written




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux