nfsd: fix inclusive vfs_fsync_range() end
The vfs_fsync_range() call during write processing got the end of the range off by one. The range is inclusive, not exclusive. The error has nfsd sync more data than requested -- it's correct but unnecessary overhead. The call during commit processing is correct so I copied that pattern in write processing. Maybe a helper would be nice but I kept it trivial. This is untested. I found it while reviewing code for something else entirely. Signed-off-by: Zach Brown <zab@zabbo.net> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
51904b0807
commit
e77a7b4f01
1 changed files with 7 additions and 3 deletions
|
@ -938,6 +938,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
||||||
int stable = *stablep;
|
int stable = *stablep;
|
||||||
int use_wgather;
|
int use_wgather;
|
||||||
loff_t pos = offset;
|
loff_t pos = offset;
|
||||||
|
loff_t end = LLONG_MAX;
|
||||||
unsigned int pflags = current->flags;
|
unsigned int pflags = current->flags;
|
||||||
|
|
||||||
if (rqstp->rq_local)
|
if (rqstp->rq_local)
|
||||||
|
@ -969,10 +970,13 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
||||||
fsnotify_modify(file);
|
fsnotify_modify(file);
|
||||||
|
|
||||||
if (stable) {
|
if (stable) {
|
||||||
if (use_wgather)
|
if (use_wgather) {
|
||||||
host_err = wait_for_concurrent_writes(file);
|
host_err = wait_for_concurrent_writes(file);
|
||||||
else
|
} else {
|
||||||
host_err = vfs_fsync_range(file, offset, offset+*cnt, 0);
|
if (*cnt)
|
||||||
|
end = offset + *cnt - 1;
|
||||||
|
host_err = vfs_fsync_range(file, offset, end, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out_nfserr:
|
out_nfserr:
|
||||||
|
|
Loading…
Add table
Reference in a new issue