Dan, why is this erroneous commit still in your tree? iomap_write_end() cannot return an errno; if an error occurs, it returns zero. The code in iomap_zero_iter() should be: bytes = iomap_write_end(iter, pos, bytes, bytes, page); if (WARN_ON_ONCE(bytes == 0)) return -EIO; On Wed, Dec 08, 2021 at 10:12:03AM +0100, Christoph Hellwig wrote: > bytes also hold the return value from iomap_write_end, which can contain > a negative error value. As bytes is always less than the page size even > the signed type can hold the entire possible range. > > Fixes: c6f40468657d ("fsdax: decouple zeroing from the iomap buffered I/O code") > Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > fs/iomap/buffered-io.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c > index b1511255b4df8..ac040d607f4fe 100644 > --- a/fs/iomap/buffered-io.c > +++ b/fs/iomap/buffered-io.c > @@ -883,7 +883,7 @@ static loff_t iomap_zero_iter(struct iomap_iter *iter, bool *did_zero) > > do { > unsigned offset = offset_in_page(pos); > - size_t bytes = min_t(u64, PAGE_SIZE - offset, length); > + ssize_t bytes = min_t(u64, PAGE_SIZE - offset, length); > struct page *page; > int status; > > -- > 2.30.2 >