svn commit: r274659 - in projects/sendfile/sys: kern vm
Gleb Smirnoff
glebius at FreeBSD.org
Tue Nov 18 15:38:42 UTC 2014
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);
More information about the svn-src-projects
mailing list