summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_syscalls.c
diff options
context:
space:
mode:
authorsemenu <semenu@FreeBSD.org>2002-08-11 20:33:11 +0000
committersemenu <semenu@FreeBSD.org>2002-08-11 20:33:11 +0000
commit68c52ce00e2d657328060b1c3b05a6775fec930d (patch)
tree1e845041ba4b13e5ec648351699a938fa675aebe /sys/kern/uipc_syscalls.c
parent049cb2e956f87bee8cd93ae00f3d9867e4dfdadc (diff)
downloadFreeBSD-src-68c52ce00e2d657328060b1c3b05a6775fec930d.zip
FreeBSD-src-68c52ce00e2d657328060b1c3b05a6775fec930d.tar.gz
Fix sendfile(), who was calling vn_rdwr() without aresid parameter and
thus hiting EIO at the end of file. This is believed to be a feature (not a bug) of vn_rdwr(), so we turn it off by supplying aresid param. Reviewed by: rwatson, dg
Diffstat (limited to 'sys/kern/uipc_syscalls.c')
-rw-r--r--sys/kern/uipc_syscalls.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
index 35f89f2..123aef6 100644
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -1838,7 +1838,7 @@ retry_lookup:
*/
if (!pg->valid || !vm_page_is_valid(pg, pgoff, xfsize)) {
- int bsize;
+ int bsize, resid;
/*
* Ensure that our page is still around when the I/O
@@ -1855,7 +1855,7 @@ retry_lookup:
error = vn_rdwr(UIO_READ, vp, NULL, MAXBSIZE,
trunc_page(off), UIO_NOCOPY, IO_NODELOCKED |
IO_VMIO | ((MAXBSIZE / bsize) << 16),
- td->td_ucred, NULL, td);
+ td->td_ucred, &resid, td);
VOP_UNLOCK(vp, 0, td);
vm_page_lock_queues();
vm_page_flag_clear(pg, PG_ZERO);
OpenPOWER on IntegriCloud