> On Nov 16, 2022, at 1:50 PM, Dai Ngo <dai.ngo@xxxxxxxxxx> wrote: > > > On 11/16/22 7:34 AM, Chuck Lever III wrote: >> >>> On Nov 16, 2022, at 10:28 AM, Brian Foster <bfoster@xxxxxxxxxx> wrote: >>> >>> _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@xxxxxxxxxx> >>> --- >>> >>> Hi all, >>> >>> This is just a quick drive-by patch from scanning through various flush >>> callers for something unrelated. It looked like this instance passes a >>> count instead of the end offset and it was easy enough to throw up a >>> patch. Compile tested only, feel free to toss it if I've just missed >>> something, etc. etc. >> Dai, Olga, can you review this, and one of you test it? > > LGTM, tested ok. May I add Tested-by: Dai Ngo <dai.ngo@xxxxxxxxxx> ? > -Dai > >> >> >>> Brian >>> >>> fs/nfsd/nfs4proc.c | 5 +++-- >>> 1 file changed, 3 insertions(+), 2 deletions(-) >>> >>> diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c >>> index 8beb2bc4c328..3c67d4cb1eba 100644 >>> --- a/fs/nfsd/nfs4proc.c >>> +++ b/fs/nfsd/nfs4proc.c >>> @@ -1644,6 +1644,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) >>> @@ -1663,8 +1664,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) >>> -- >>> 2.37.3 >>> >> -- >> Chuck Lever -- Chuck Lever