From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiubo Li Date: Mon, 22 May 2023 10:20:56 +0800 Subject: [Cluster-devel] [PATCH 02/13] filemap: update ki_pos in generic_perform_write In-Reply-To: <20230519093521.133226-3-hch@lst.de> References: <20230519093521.133226-1-hch@lst.de> <20230519093521.133226-3-hch@lst.de> Message-ID: <745e2a68-ed19-dc3d-803a-a7d1d47903dd@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit On 5/19/23 17:35, Christoph Hellwig wrote: > All callers of generic_perform_write need to updated ki_pos, move it into > common code. > > Signed-off-by: Christoph Hellwig > --- > fs/ceph/file.c | 2 -- > fs/ext4/file.c | 9 +++------ > fs/f2fs/file.c | 1 - > fs/nfs/file.c | 1 - > mm/filemap.c | 8 ++++---- > 5 files changed, 7 insertions(+), 14 deletions(-) > > diff --git a/fs/ceph/file.c b/fs/ceph/file.c > index f4d8bf7dec88a8..feeb9882ef635a 100644 > --- a/fs/ceph/file.c > +++ b/fs/ceph/file.c > @@ -1894,8 +1894,6 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from) > * can not run at the same time > */ > written = generic_perform_write(iocb, from); > - if (likely(written >= 0)) > - iocb->ki_pos = pos + written; > ceph_end_io_write(inode); > } > > diff --git a/fs/ext4/file.c b/fs/ext4/file.c > index d101b3b0c7dad8..50824831d31def 100644 > --- a/fs/ext4/file.c > +++ b/fs/ext4/file.c > @@ -291,12 +291,9 @@ static ssize_t ext4_buffered_write_iter(struct kiocb *iocb, > > out: > inode_unlock(inode); > - if (likely(ret > 0)) { > - iocb->ki_pos += ret; > - ret = generic_write_sync(iocb, ret); > - } > - > - return ret; > + if (unlikely(ret <= 0)) > + return ret; > + return generic_write_sync(iocb, ret); > } > > static ssize_t ext4_handle_inode_extension(struct inode *inode, loff_t offset, > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > index 5ac53d2627d20d..9e3855e43a7a63 100644 > --- a/fs/f2fs/file.c > +++ b/fs/f2fs/file.c > @@ -4522,7 +4522,6 @@ static ssize_t f2fs_buffered_write_iter(struct kiocb *iocb, > current->backing_dev_info = NULL; > > if (ret > 0) { > - iocb->ki_pos += ret; > f2fs_update_iostat(F2FS_I_SB(inode), inode, > APP_BUFFERED_IO, ret); > } > diff --git a/fs/nfs/file.c b/fs/nfs/file.c > index f0edf5a36237d1..3cc87ae8473356 100644 > --- a/fs/nfs/file.c > +++ b/fs/nfs/file.c > @@ -658,7 +658,6 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) > goto out; > > written = result; > - iocb->ki_pos += written; > nfs_add_stats(inode, NFSIOS_NORMALWRITTENBYTES, written); > > if (mntflags & NFS_MOUNT_WRITE_EAGER) { > diff --git a/mm/filemap.c b/mm/filemap.c > index b4c9bd368b7e58..4d0ec2fa1c7070 100644 > --- a/mm/filemap.c > +++ b/mm/filemap.c > @@ -3957,7 +3957,10 @@ ssize_t generic_perform_write(struct kiocb *iocb, struct iov_iter *i) > balance_dirty_pages_ratelimited(mapping); > } while (iov_iter_count(i)); > > - return written ? written : status; > + if (!written) > + return status; > + iocb->ki_pos += written; > + return written; > } > EXPORT_SYMBOL(generic_perform_write); > > @@ -4036,7 +4039,6 @@ ssize_t __generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from) > endbyte = pos + status - 1; > err = filemap_write_and_wait_range(mapping, pos, endbyte); > if (err == 0) { > - iocb->ki_pos = endbyte + 1; > written += status; > invalidate_mapping_pages(mapping, > pos >> PAGE_SHIFT, > @@ -4049,8 +4051,6 @@ ssize_t __generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from) > } > } else { > written = generic_perform_write(iocb, from); > - if (likely(written > 0)) > - iocb->ki_pos += written; > } > out: > current->backing_dev_info = NULL; LGTM. Reviewed-by: Xiubo Li Thanks - Xiubo