Message ID | 20230524063810.1595778-8-hch@lst.de |
---|---|
State | Superseded |
Headers | show |
Series | [01/11] backing_dev: remove current->backing_dev_info | expand |
On Wed, May 24, 2023 at 8:54 AM Christoph Hellwig <hch@lst.de> wrote: > All callers of iomap_file_buffered_write need to updated ki_pos, move it > into common code. Thanks for this set of cleanups, especially for the patch killing current->backing_dev_info. Reviewed-by: Andreas Gruenbacher <agruenba@redhat.com> > Signed-off-by: Christoph Hellwig <hch@lst.de> > Acked-by: Damien Le Moal <dlemoal@kernel.org> > Reviewed-by: Darrick J. Wong <djwong@kernel.org> > --- > fs/gfs2/file.c | 4 +--- > fs/iomap/buffered-io.c | 9 ++++++--- > fs/xfs/xfs_file.c | 2 -- > fs/zonefs/file.c | 4 +--- > 4 files changed, 8 insertions(+), 11 deletions(-) > > diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c > index 904a0d6ac1a1a9..c6a7555d5ad8bb 100644 > --- a/fs/gfs2/file.c > +++ b/fs/gfs2/file.c > @@ -1044,10 +1044,8 @@ static ssize_t gfs2_file_buffered_write(struct kiocb *iocb, > pagefault_disable(); > ret = iomap_file_buffered_write(iocb, from, &gfs2_iomap_ops); > pagefault_enable(); > - if (ret > 0) { > - iocb->ki_pos += ret; > + if (ret > 0) > written += ret; > - } > > if (inode == sdp->sd_rindex) > gfs2_glock_dq_uninit(statfs_gh); > diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c > index 063133ec77f49e..550525a525c45c 100644 > --- a/fs/iomap/buffered-io.c > +++ b/fs/iomap/buffered-io.c > @@ -864,16 +864,19 @@ iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *i, > .len = iov_iter_count(i), > .flags = IOMAP_WRITE, > }; > - int ret; > + ssize_t ret; > > if (iocb->ki_flags & IOCB_NOWAIT) > iter.flags |= IOMAP_NOWAIT; > > while ((ret = iomap_iter(&iter, ops)) > 0) > iter.processed = iomap_write_iter(&iter, i); > - if (iter.pos == iocb->ki_pos) > + > + if (unlikely(ret < 0)) > return ret; > - return iter.pos - iocb->ki_pos; > + ret = iter.pos - iocb->ki_pos; > + iocb->ki_pos += ret; > + return ret; > } > EXPORT_SYMBOL_GPL(iomap_file_buffered_write); > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 431c3fd0e2b598..d57443db633637 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -720,8 +720,6 @@ xfs_file_buffered_write( > trace_xfs_file_buffered_write(iocb, from); > ret = iomap_file_buffered_write(iocb, from, > &xfs_buffered_write_iomap_ops); > - if (likely(ret >= 0)) > - iocb->ki_pos += ret; > > /* > * If we hit a space limit, try to free up some lingering preallocated > diff --git a/fs/zonefs/file.c b/fs/zonefs/file.c > index 132f01d3461f14..e212d0636f848e 100644 > --- a/fs/zonefs/file.c > +++ b/fs/zonefs/file.c > @@ -643,9 +643,7 @@ static ssize_t zonefs_file_buffered_write(struct kiocb *iocb, > goto inode_unlock; > > ret = iomap_file_buffered_write(iocb, from, &zonefs_write_iomap_ops); > - if (ret > 0) > - iocb->ki_pos += ret; > - else if (ret == -EIO) > + if (ret == -EIO) > zonefs_io_error(inode, true); > > inode_unlock: > -- > 2.39.2 >
On 5/24/23 08:38, Christoph Hellwig wrote: > All callers of iomap_file_buffered_write need to updated ki_pos, move it > into common code. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > Acked-by: Damien Le Moal <dlemoal@kernel.org> > Reviewed-by: Darrick J. Wong <djwong@kernel.org> > --- > fs/gfs2/file.c | 4 +--- > fs/iomap/buffered-io.c | 9 ++++++--- > fs/xfs/xfs_file.c | 2 -- > fs/zonefs/file.c | 4 +--- > 4 files changed, 8 insertions(+), 11 deletions(-) > Reviewed-by: Hannes Reinecke <hare@suse.de> Cheers, Hannes
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 904a0d6ac1a1a9..c6a7555d5ad8bb 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -1044,10 +1044,8 @@ static ssize_t gfs2_file_buffered_write(struct kiocb *iocb, pagefault_disable(); ret = iomap_file_buffered_write(iocb, from, &gfs2_iomap_ops); pagefault_enable(); - if (ret > 0) { - iocb->ki_pos += ret; + if (ret > 0) written += ret; - } if (inode == sdp->sd_rindex) gfs2_glock_dq_uninit(statfs_gh); diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index 063133ec77f49e..550525a525c45c 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -864,16 +864,19 @@ iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *i, .len = iov_iter_count(i), .flags = IOMAP_WRITE, }; - int ret; + ssize_t ret; if (iocb->ki_flags & IOCB_NOWAIT) iter.flags |= IOMAP_NOWAIT; while ((ret = iomap_iter(&iter, ops)) > 0) iter.processed = iomap_write_iter(&iter, i); - if (iter.pos == iocb->ki_pos) + + if (unlikely(ret < 0)) return ret; - return iter.pos - iocb->ki_pos; + ret = iter.pos - iocb->ki_pos; + iocb->ki_pos += ret; + return ret; } EXPORT_SYMBOL_GPL(iomap_file_buffered_write); diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 431c3fd0e2b598..d57443db633637 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -720,8 +720,6 @@ xfs_file_buffered_write( trace_xfs_file_buffered_write(iocb, from); ret = iomap_file_buffered_write(iocb, from, &xfs_buffered_write_iomap_ops); - if (likely(ret >= 0)) - iocb->ki_pos += ret; /* * If we hit a space limit, try to free up some lingering preallocated diff --git a/fs/zonefs/file.c b/fs/zonefs/file.c index 132f01d3461f14..e212d0636f848e 100644 --- a/fs/zonefs/file.c +++ b/fs/zonefs/file.c @@ -643,9 +643,7 @@ static ssize_t zonefs_file_buffered_write(struct kiocb *iocb, goto inode_unlock; ret = iomap_file_buffered_write(iocb, from, &zonefs_write_iomap_ops); - if (ret > 0) - iocb->ki_pos += ret; - else if (ret == -EIO) + if (ret == -EIO) zonefs_io_error(inode, true); inode_unlock: