From owner-svn-src-projects@FreeBSD.ORG Tue Nov 18 15:38:42 2014 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 7B7CEEFE; Tue, 18 Nov 2014 15:38:42 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5C7A27A9; Tue, 18 Nov 2014 15:38:42 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id sAIFcge1008578; Tue, 18 Nov 2014 15:38:42 GMT (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id sAIFcees008568; Tue, 18 Nov 2014 15:38:40 GMT (envelope-from glebius@FreeBSD.org) Message-Id: <201411181538.sAIFcees008568@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: glebius set sender to glebius@FreeBSD.org using -f From: Gleb Smirnoff Date: Tue, 18 Nov 2014 15:38:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r274659 - in projects/sendfile/sys: kern vm X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Nov 2014 15:38:42 -0000 Author: glebius Date: Tue Nov 18 15:38:40 2014 New Revision: 274659 URL: https://svnweb.freebsd.org/changeset/base/274659 Log: Pass array of pages and count to VOP_GETPAGES() iodone functions. Suggested by: kib Sponsored by: Nginx, Inc. Modified: projects/sendfile/sys/kern/uipc_syscalls.c projects/sendfile/sys/kern/vfs_default.c projects/sendfile/sys/kern/vnode_if.src projects/sendfile/sys/vm/vm_pager.h projects/sendfile/sys/vm/vnode_pager.c projects/sendfile/sys/vm/vnode_pager.h Modified: projects/sendfile/sys/kern/uipc_syscalls.c ============================================================================== --- projects/sendfile/sys/kern/uipc_syscalls.c Tue Nov 18 15:02:11 2014 (r274658) +++ projects/sendfile/sys/kern/uipc_syscalls.c Tue Nov 18 15:38:40 2014 (r274659) @@ -2065,7 +2065,7 @@ struct sf_io { }; static void -sf_iodone(void *arg, int error) +sf_iodone(void *arg, vm_page_t *pg, int reqpage, int error) { struct sf_io *sfio = arg; struct socket *so; @@ -2593,7 +2593,7 @@ retry_space: fhold(sock_fp); error = (*so->so_proto->pr_usrreqs->pru_send) (so, PRUS_NOTREADY, m, NULL, NULL, td); - sf_iodone(sfio, 0); + sf_iodone(sfio, NULL, 0, 0); } CURVNET_RESTORE(); Modified: projects/sendfile/sys/kern/vfs_default.c ============================================================================== --- projects/sendfile/sys/kern/vfs_default.c Tue Nov 18 15:02:11 2014 (r274658) +++ projects/sendfile/sys/kern/vfs_default.c Tue Nov 18 15:38:40 2014 (r274659) @@ -737,7 +737,7 @@ vop_stdgetpages_async(struct vop_getpage error = VOP_GETPAGES(ap->a_vp, ap->a_m, ap->a_count, ap->a_reqpage); vm_page_xunbusy(ap->a_m[ap->a_reqpage]); - ap->a_vop_getpages_iodone(ap->a_arg, error); + ap->a_vop_getpages_iodone(ap->a_arg, ap->a_m, ap->a_reqpage, error); return (error); } Modified: projects/sendfile/sys/kern/vnode_if.src ============================================================================== --- projects/sendfile/sys/kern/vnode_if.src Tue Nov 18 15:02:11 2014 (r274658) +++ projects/sendfile/sys/kern/vnode_if.src Tue Nov 18 15:38:40 2014 (r274659) @@ -484,7 +484,7 @@ vop_getpages_async { IN int count; IN int reqpage; IN vm_ooffset_t offset; - IN void (*vop_getpages_iodone)(void *, int); + IN void (*vop_getpages_iodone)(void *, vm_page_t *, int, int); IN void *arg; }; Modified: projects/sendfile/sys/vm/vm_pager.h ============================================================================== --- projects/sendfile/sys/vm/vm_pager.h Tue Nov 18 15:02:11 2014 (r274658) +++ projects/sendfile/sys/vm/vm_pager.h Tue Nov 18 15:38:40 2014 (r274659) @@ -52,7 +52,7 @@ typedef vm_object_t pgo_alloc_t(void *, typedef void pgo_dealloc_t(vm_object_t); typedef int pgo_getpages_t(vm_object_t, vm_page_t *, int, int); typedef int pgo_getpages_async_t(vm_object_t, vm_page_t *, int, int, - void(*)(void *, int), void *); + void(*)(void *, vm_page_t *, int, int), void *); typedef void pgo_putpages_t(vm_object_t, vm_page_t *, int, int, int *); typedef boolean_t pgo_haspage_t(vm_object_t, vm_pindex_t, int *, int *); typedef void pgo_pageunswapped_t(vm_page_t); @@ -107,7 +107,7 @@ void vm_pager_bufferinit(void); void vm_pager_deallocate(vm_object_t); static __inline int vm_pager_get_pages(vm_object_t, vm_page_t *, int, int); static inline int vm_pager_get_pages_async(vm_object_t, vm_page_t *, int, - int, void(*)(void *, int), void *); + int, void(*)(void *, vm_page_t *, int, int), void *); static __inline boolean_t vm_pager_has_page(vm_object_t, vm_pindex_t, int *, int *); void vm_pager_init(void); vm_object_t vm_pager_object_lookup(struct pagerlst *, void *); @@ -140,7 +140,7 @@ vm_pager_get_pages( static inline int vm_pager_get_pages_async(vm_object_t object, vm_page_t *m, int count, - int reqpage, void (*iodone)(void *, int), void *arg) + int reqpage, void (*iodone)(void *, vm_page_t *, int, int), void *arg) { int r; @@ -150,7 +150,7 @@ vm_pager_get_pages_async(vm_object_t obj /* Emulate async operation. */ r = vm_pager_get_pages(object, m, count, reqpage); VM_OBJECT_WUNLOCK(object); - (iodone)(arg, r); + (iodone)(arg, m, count, r); VM_OBJECT_WLOCK(object); } else r = (*pagertab[object->type]->pgo_getpages_async)(object, m, Modified: projects/sendfile/sys/vm/vnode_pager.c ============================================================================== --- projects/sendfile/sys/vm/vnode_pager.c Tue Nov 18 15:02:11 2014 (r274658) +++ projects/sendfile/sys/vm/vnode_pager.c Tue Nov 18 15:38:40 2014 (r274659) @@ -92,7 +92,7 @@ struct getpages_data { int size; int count; int reqpage; - void (*iodone)(void *, int); + void (*iodone)(void *, vm_page_t *, int, int); void *arg; }; @@ -102,10 +102,10 @@ static int vnode_pager_input_smlfs(vm_ob static int vnode_pager_input_old(vm_object_t object, vm_page_t m); static void vnode_pager_dealloc(vm_object_t); static int vnode_pager_local_getpages0(struct vnode *, vm_page_t *, int, int, - void (*)(void *, int), void *); + void (*)(void *, vm_page_t *, int, int), void *); static int vnode_pager_getpages(vm_object_t, vm_page_t *, int, int); static int vnode_pager_getpages_async(vm_object_t, vm_page_t *, int, int, - void(*)(void *, int), void *); + void(*)(void *, vm_page_t *, int, int), void *); static void vnode_pager_putpages(vm_object_t, vm_page_t *, int, int, int *); static boolean_t vnode_pager_haspage(vm_object_t, vm_pindex_t, int *, int *); static vm_object_t vnode_pager_alloc(void *, vm_ooffset_t, vm_prot_t, @@ -692,7 +692,7 @@ vnode_pager_getpages(vm_object_t object, static int vnode_pager_getpages_async(vm_object_t object, vm_page_t *m, int count, - int reqpage, void (*iodone)(void *, int), void *arg) + int reqpage, void (*iodone)(void *, vm_page_t *, int, int), void *arg) { int rtval; struct vnode *vp; @@ -730,7 +730,7 @@ vnode_pager_local_getpages_async(struct static int vnode_pager_local_getpages0(struct vnode *vp, vm_page_t *m, int bytecount, - int reqpage, void (*iodone)(void *, int), void *arg) + int reqpage, void (*iodone)(void *, vm_page_t *, int, int), void *arg) { vm_page_t mreq; @@ -752,7 +752,7 @@ vnode_pager_local_getpages0(struct vnode vm_pager_free_nonreq(mreq->object, m, reqpage, round_page(bytecount) / PAGE_SIZE); if (iodone != NULL) - iodone(arg, 0); + iodone(arg, m, reqpage, 0); return (VM_PAGER_OK); } @@ -766,7 +766,7 @@ vnode_pager_local_getpages0(struct vnode */ int vnode_pager_generic_getpages(struct vnode *vp, vm_page_t *m, int bytecount, - int reqpage, void (*iodone)(void *, int), void *arg) + int reqpage, void (*iodone)(void *, vm_page_t *, int, int), void *arg) { vm_object_t object; vm_offset_t kva; @@ -1061,7 +1061,7 @@ vnode_pager_generic_getpages_done_async( error = vnode_pager_generic_getpages_done(d); vm_page_xunbusy(d->m[d->reqpage]); - d->iodone(d->arg, error); + d->iodone(d->arg, d->m, d->reqpage, error); free(d, M_TEMP); } Modified: projects/sendfile/sys/vm/vnode_pager.h ============================================================================== --- projects/sendfile/sys/vm/vnode_pager.h Tue Nov 18 15:02:11 2014 (r274658) +++ projects/sendfile/sys/vm/vnode_pager.h Tue Nov 18 15:38:40 2014 (r274659) @@ -41,7 +41,8 @@ #ifdef _KERNEL int vnode_pager_generic_getpages(struct vnode *vp, vm_page_t *m, - int count, int reqpage, void (*iodone)(void *, int), void *arg); + int count, int reqpage, void (*iodone)(void *, vm_page_t *, int, int), + void *arg); int vnode_pager_generic_putpages(struct vnode *vp, vm_page_t *m, int count, boolean_t sync, int *rtvals);