SetPageUptodate(page);
 }
 
+static inline bool iomap_block_needs_zeroing(struct inode *inode,
+               struct iomap *iomap, loff_t pos)
+{
+       return iomap->type != IOMAP_MAPPED ||
+               (iomap->flags & IOMAP_F_NEW) ||
+               pos >= i_size_read(inode);
+}
+
 static loff_t
 iomap_readpage_actor(struct inode *inode, loff_t pos, loff_t length, void *data,
                struct iomap *iomap)
        if (plen == 0)
                goto done;
 
-       if (iomap->type != IOMAP_MAPPED || pos >= i_size_read(inode)) {
+       if (iomap_block_needs_zeroing(inode, iomap, pos)) {
                zero_user(page, poff, plen);
                iomap_set_range_uptodate(page, poff, plen);
                goto done;
        struct bio_vec bvec;
        struct bio bio;
 
-       if (iomap->type != IOMAP_MAPPED || block_start >= i_size_read(inode)) {
+       if (iomap_block_needs_zeroing(inode, iomap, block_start)) {
                zero_user_segments(page, poff, from, to, poff + plen);
                iomap_set_range_uptodate(page, poff, plen);
                return 0;