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;
 
                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;