From owner-freebsd-current Mon Aug 19 9:34:12 2002 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EBA0537B400; Mon, 19 Aug 2002 09:34:05 -0700 (PDT) Received: from viola.sinor.ru (viola.sinor.ru [217.70.106.9]) by mx1.FreeBSD.org (Postfix) with ESMTP id D02D643E86; Mon, 19 Aug 2002 09:34:04 -0700 (PDT) (envelope-from semenu@FreeBSD.org) Received: from tlg5-ppp45.sibnet.ru (tlg5-ppp45.sibnet.ru [217.70.116.45]) by viola.sinor.ru (8.12.3/8.12.3) with ESMTP id g7JGXwA2003607; Mon, 19 Aug 2002 23:34:00 +0700 Date: Mon, 19 Aug 2002 23:33:20 +0700 (NOVST) From: "Semen A. Ustimenko" X-X-Sender: semenu@main.the.net To: Bruce Evans Cc: freebsd-current@FreeBSD.org, Maxim Konovalov , Robert Watson , Subject: sendfile() change (Was: Re: cvs commit: src/sys/kern uipc_syscalls.c) In-Reply-To: <20020812202953.U24022-100000@gamplex.bde.org> Message-ID: <20020819231230.S678-100000@main.the.net> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG 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 majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message