Christoph Hellwig <hch@xxxxxx> writes: > When write* wrote some data it should return the amount of written data > and not the error code that caused it to stop. Fix a recent regression > in iomap_file_buffered_write that caused it to return the errno instead. > Agreed. Reviewed the change and it looks right to me. Feel free to add - Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx> > Fixes: 219580eea1ee ("iomap: update ki_pos in iomap_file_buffered_write") > Reported-by: kernel test robot <oliver.sang@xxxxxxxxx> > Reported-by: Cyril Hrubis <chrubis@xxxxxxx> > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- In case anyone wanted to see before and after test failures output of ./runltp -f syscalls -s writev07 -d /mnt1/test <without this patch> tst_test.c:1558: TINFO: Timeout per run is 0h 00m 30s writev07.c:50: TINFO: starting test with initial file offset: 0 writev07.c:73: TINFO: got EFAULT writev07.c:78: TFAIL: file was written to writev07.c:84: TPASS: offset stayed unchanged writev07.c:50: TINFO: starting test with initial file offset: 65 writev07.c:73: TINFO: got EFAULT writev07.c:78: TFAIL: file was written to writev07.c:84: TPASS: offset stayed unchanged writev07.c:50: TINFO: starting test with initial file offset: 4096 writev07.c:73: TINFO: got EFAULT writev07.c:80: TPASS: file stayed untouched writev07.c:84: TPASS: offset stayed unchanged writev07.c:50: TINFO: starting test with initial file offset: 4097 writev07.c:73: TINFO: got EFAULT writev07.c:80: TPASS: file stayed untouched writev07.c:84: TPASS: offset stayed unchanged Summary: passed 6 failed 2 broken 0 skipped 0 warnings 0 <with this patch> tst_test.c:1558: TINFO: Timeout per run is 0h 00m 30s writev07.c:50: TINFO: starting test with initial file offset: 0 writev07.c:94: TINFO: writev() has written 64 bytes writev07.c:105: TPASS: file has expected content writev07.c:116: TPASS: offset at 64 as expected writev07.c:50: TINFO: starting test with initial file offset: 65 writev07.c:94: TINFO: writev() has written 64 bytes writev07.c:105: TPASS: file has expected content writev07.c:116: TPASS: offset at 129 as expected writev07.c:50: TINFO: starting test with initial file offset: 4096 writev07.c:94: TINFO: writev() has written 64 bytes writev07.c:105: TPASS: file has expected content writev07.c:116: TPASS: offset at 4160 as expected writev07.c:50: TINFO: starting test with initial file offset: 4097 writev07.c:94: TINFO: writev() has written 64 bytes writev07.c:105: TPASS: file has expected content writev07.c:116: TPASS: offset at 4161 as expected Summary: passed 8 failed 0 broken 0 skipped 0 warnings 0 > 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 adb92cdb24b009..7cc9f7274883a5 100644 > --- a/fs/iomap/buffered-io.c > +++ b/fs/iomap/buffered-io.c > @@ -872,7 +872,7 @@ iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *i, > while ((ret = iomap_iter(&iter, ops)) > 0) > iter.processed = iomap_write_iter(&iter, i); > > - if (unlikely(ret < 0)) > + if (unlikely(iter.pos == iocb->ki_pos)) > return ret; > ret = iter.pos - iocb->ki_pos; > iocb->ki_pos += ret; > -- > 2.39.2 -ritesh