From: Andreas Gruenbacher Date: Tue, 26 Apr 2022 21:31:06 +0000 (+0200) Subject: gfs2: Explain some direct I/O oddities X-Git-Tag: v5.19-rc1~173^2~4 X-Git-Url: https://gentwo.org/gitweb/?a=commitdiff_plain;h=53bb540fd591f6fdd4cb5c9a785d9790ac33862d;p=linux%2F.git gfs2: Explain some direct I/O oddities Add some comments explaining the oddities of partial direct I/O reads and writes. Signed-off-by: Andreas Gruenbacher --- diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 2556ae1f92ea..f1d2f4d74b89 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -840,6 +840,7 @@ static ssize_t gfs2_file_direct_read(struct kiocb *iocb, struct iov_iter *to, pagefault_enable(); if (ret <= 0 && ret != -EFAULT) goto out_unlock; + /* No increment (+=) because iomap_dio_rw returns a cumulative value. */ if (ret > 0) read = ret; @@ -854,6 +855,7 @@ static ssize_t gfs2_file_direct_read(struct kiocb *iocb, struct iov_iter *to, gfs2_glock_dq(gh); out_uninit: gfs2_holder_uninit(gh); + /* User space doesn't expect partial success. */ if (ret < 0) return ret; return read; @@ -906,6 +908,7 @@ static ssize_t gfs2_file_direct_write(struct kiocb *iocb, struct iov_iter *from, if (ret != -EFAULT) goto out_unlock; } + /* No increment (+=) because iomap_dio_rw returns a cumulative value. */ if (ret > 0) written = ret; @@ -920,6 +923,7 @@ static ssize_t gfs2_file_direct_write(struct kiocb *iocb, struct iov_iter *from, gfs2_glock_dq(gh); out_uninit: gfs2_holder_uninit(gh); + /* User space doesn't expect partial success. */ if (ret < 0) return ret; return written;