]> www.infradead.org Git - users/hch/configfs.git/commitdiff
iomap: don't bother unsharing delalloc extents
authorDarrick J. Wong <djwong@kernel.org>
Wed, 2 Oct 2024 15:00:40 +0000 (08:00 -0700)
committerChristian Brauner <brauner@kernel.org>
Thu, 3 Oct 2024 08:22:25 +0000 (10:22 +0200)
If unshare encounters a delalloc reservation in the srcmap, that means
that the file range isn't shared because delalloc reservations cannot be
reflinked.  Therefore, don't try to unshare them.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Link: https://lore.kernel.org/r/20241002150040.GB21853@frogsfrogsfrogs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/iomap/buffered-io.c

index 11ea747228aeec11a8e67af844fad383df674371..c1c559e0cc07cf3d03c3871180af376180b99f69 100644 (file)
@@ -1321,7 +1321,7 @@ static loff_t iomap_unshare_iter(struct iomap_iter *iter)
                return length;
 
        /*
-        * Don't bother with holes or unwritten extents.
+        * Don't bother with delalloc reservations, holes or unwritten extents.
         *
         * Note that we use srcmap directly instead of iomap_iter_srcmap as
         * unsharing requires providing a separate source map, and the presence
@@ -1330,6 +1330,7 @@ static loff_t iomap_unshare_iter(struct iomap_iter *iter)
         * fork for XFS.
         */
        if (iter->srcmap.type == IOMAP_HOLE ||
+           iter->srcmap.type == IOMAP_DELALLOC ||
            iter->srcmap.type == IOMAP_UNWRITTEN)
                return length;