NFSD: pass range end to vfs_fsync_range() instead of count
[ Upstream commit 79a1d88a36f77374c77fd41a4386d8c2736b8704 ] _nfsd_copy_file_range() calls vfs_fsync_range() with an offset and count (bytes written), but the former wants the start and end bytes of the range to sync. Fix it up. Fixes: eac0b17a77fb ("NFSD add vfs_fsync after async copy is done") Signed-off-by: Brian Foster <bfoster@redhat.com> Tested-by: Dai Ngo <dai.ngo@oracle.com> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
b4046b2336
commit
f459774968
1 changed files with 3 additions and 2 deletions
|
@ -1628,6 +1628,7 @@ static ssize_t _nfsd_copy_file_range(struct nfsd4_copy *copy,
|
|||
u64 src_pos = copy->cp_src_pos;
|
||||
u64 dst_pos = copy->cp_dst_pos;
|
||||
int status;
|
||||
loff_t end;
|
||||
|
||||
/* See RFC 7862 p.67: */
|
||||
if (bytes_total == 0)
|
||||
|
@ -1647,8 +1648,8 @@ static ssize_t _nfsd_copy_file_range(struct nfsd4_copy *copy,
|
|||
/* for a non-zero asynchronous copy do a commit of data */
|
||||
if (nfsd4_copy_is_async(copy) && copy->cp_res.wr_bytes_written > 0) {
|
||||
since = READ_ONCE(dst->f_wb_err);
|
||||
status = vfs_fsync_range(dst, copy->cp_dst_pos,
|
||||
copy->cp_res.wr_bytes_written, 0);
|
||||
end = copy->cp_dst_pos + copy->cp_res.wr_bytes_written - 1;
|
||||
status = vfs_fsync_range(dst, copy->cp_dst_pos, end, 0);
|
||||
if (!status)
|
||||
status = filemap_check_wb_err(dst->f_mapping, since);
|
||||
if (!status)
|
||||
|
|
Loading…
Add table
Reference in a new issue