@@ -342,19 +342,19 @@ __iomap_write_begin(struct inode *inode, loff_t pos, unsigned len,
loff_t block_end = (pos + len + block_size - 1) & ~(block_size - 1);
unsigned poff = block_start & (PAGE_SIZE - 1);
unsigned plen = min_t(loff_t, PAGE_SIZE - poff, block_end - block_start);
+ unsigned from = pos & (PAGE_SIZE - 1);
+ unsigned to = from + len;
int status;
WARN_ON_ONCE(i_blocksize(inode) < PAGE_SIZE);
if (PageUptodate(page))
return 0;
+ if (poff >= from && poff + len <= to)
+ return 0;
if (iomap_block_needs_zeroing(inode, block_start, iomap)) {
- unsigned from = pos & (PAGE_SIZE - 1), to = from + len;
- unsigned pend = poff + plen;
-
- if (poff < from || pend > to)
- zero_user_segments(page, poff, from, to, pend);
+ zero_user_segments(page, poff, from, to, poff + len);
} else {
status = iomap_read_page_sync(inode, block_start, page,
poff, plen, iomap);