Hi!
Why can't we get rid of VOP_READ(.. UIO_NOCOPY...) call in sendfile()?
Me, I can't quite understand what UIO_NOCOPY means... As long as
sendfile() function already plays around pages, it can use VOP_GETPAGES().
The following patch looks works for me. Could anybody said if it has any
benefits or not?
Index: uipc_syscalls.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/uipc_syscalls.c,v
retrieving revision 1.110
diff -u -r1.110 uipc_syscalls.c
--- uipc_syscalls.c 20 May 2002 05:41:03 -0000 1.110
+++ uipc_syscalls.c 13 Aug 2002 17:54:33 -0000
@@ -1820,10 +1820,7 @@
*/
bsize = vp->v_mount->mnt_stat.f_iosize;
vn_lock(vp, LK_SHARED | LK_NOPAUSE | LK_RETRY, td);
- 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);
+ error = VOP_GETPAGES(vp, &pg, PAGE_SIZE, 0, 0);
VOP_UNLOCK(vp, 0, td);
vm_page_flag_clear(pg, PG_ZERO);
vm_page_io_finish(pg);
Bye!
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message