xfs: report IOMAP_F_SHARED from xfs_file_iomap_begin_delay
authorChristoph Hellwig <hch@lst.de>
Mon, 18 Feb 2019 17:38:48 +0000 (09:38 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Thu, 21 Feb 2019 15:55:07 +0000 (07:55 -0800)
No user of it in the iomap code at the moment, but we should not
actively report wrong information if we can trivially get it right.

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/xfs_iomap.c

index 08c4d1d..0803ed7 100644 (file)
@@ -541,7 +541,7 @@ xfs_file_iomap_begin_delay(
        struct xfs_bmbt_irec    imap, cmap;
        struct xfs_iext_cursor  icur, ccur;
        xfs_fsblock_t           prealloc_blocks = 0;
-       bool                    eof = false, cow_eof = false, shared;
+       bool                    eof = false, cow_eof = false, shared = false;
        int                     whichfork = XFS_DATA_FORK;
        int                     error = 0;
 
@@ -710,13 +710,14 @@ done:
                if (imap.br_startoff > offset_fsb) {
                        xfs_trim_extent(&cmap, offset_fsb,
                                        imap.br_startoff - offset_fsb);
-                       error = xfs_bmbt_to_iomap(ip, iomap, &cmap, false);
+                       error = xfs_bmbt_to_iomap(ip, iomap, &cmap, true);
                        goto out_unlock;
                }
                /* ensure we only report blocks we have a reservation for */
                xfs_trim_extent(&imap, cmap.br_startoff, cmap.br_blockcount);
+               shared = true;
        }
-       error = xfs_bmbt_to_iomap(ip, iomap, &imap, false);
+       error = xfs_bmbt_to_iomap(ip, iomap, &imap, shared);
 out_unlock:
        xfs_iunlock(ip, XFS_ILOCK_EXCL);
        return error;