struct gfs2_sbd *sdp = GFS2_SB(inode);
unsigned int blocks;
+ /* gfs2 does not support large folios yet */
+ if (len > PAGE_SIZE)
+ len = PAGE_SIZE;
blocks = ((pos & blockmask) + len + blockmask) >> inode->i_blkbits;
return gfs2_trans_begin(sdp, RES_DINODE + blocks, 0);
}
goto out_no_page;
}
folio = page_folio(page);
+ if (pos + len > folio_pos(folio) + folio_size(folio))
+ len = folio_pos(folio) + folio_size(folio) - pos;
if (srcmap->type == IOMAP_INLINE)
status = iomap_write_begin_inline(iter, page);
struct page *page;
int status;
unsigned offset = offset_in_page(pos);
- unsigned bytes = min_t(u64, PAGE_SIZE - offset, length);
- status = iomap_write_begin(iter, pos, bytes, &page);
+ if (length > UINT_MAX)
+ length = UINT_MAX;
+ status = iomap_write_begin(iter, pos, length, &page);
if (status)
return status;
+ if (length > PAGE_SIZE - offset)
+ length = PAGE_SIZE - offset;
- zero_user(page, offset, bytes);
+ zero_user(page, offset, length);
mark_page_accessed(page);
- return iomap_write_end(iter, pos, bytes, bytes, page);
+ return iomap_write_end(iter, pos, length, length, page);
}
static loff_t iomap_zero_iter(struct iomap_iter *iter, bool *did_zero)