svn commit: r274657 - projects/sendfile/sys/vm
Gleb Smirnoff
glebius at FreeBSD.org
Tue Nov 18 14:56:17 UTC 2014
Author: glebius
Date: Tue Nov 18 14:56:16 2014
New Revision: 274657
URL: https://svnweb.freebsd.org/changeset/base/274657
Log:
- Rename getpages_softc to getpages_data.
- Remove local variables in vnode_pager_generic_getpages_done().
Reviewed by: kib
Sponsored by: Nginx, Inc.
Modified:
projects/sendfile/sys/vm/vnode_pager.c
Modified: projects/sendfile/sys/vm/vnode_pager.c
==============================================================================
--- projects/sendfile/sys/vm/vnode_pager.c Tue Nov 18 14:12:19 2014 (r274656)
+++ projects/sendfile/sys/vm/vnode_pager.c Tue Nov 18 14:56:16 2014 (r274657)
@@ -82,15 +82,15 @@ __FBSDID("$FreeBSD$");
* to vnode_pager_generic_getpages_done() either to
* vnode_pager_generic_getpages_done_async().
*/
-struct getpages_softc {
+struct getpages_data {
vm_page_t *m;
struct buf *bp;
vm_object_t object;
vm_offset_t kva;
off_t foff;
+ boolean_t unmapped;
int size;
int count;
- int unmapped;
int reqpage;
void (*iodone)(void *, int);
void *arg;
@@ -110,7 +110,7 @@ static void vnode_pager_putpages(vm_obje
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,
vm_ooffset_t, struct ucred *cred);
-static int vnode_pager_generic_getpages_done(struct getpages_softc *);
+static int vnode_pager_generic_getpages_done(struct getpages_data *);
static void vnode_pager_generic_getpages_done_async(struct buf *);
struct pagerops vnodepagerops = {
@@ -1009,45 +1009,45 @@ vnode_pager_generic_getpages(struct vnod
bp->b_iooffset = dbtob(bp->b_blkno);
if (iodone) { /* async */
- struct getpages_softc *sc;
+ struct getpages_data *d;
- sc = malloc(sizeof(*sc), M_TEMP, M_WAITOK);
+ d = malloc(sizeof(*d), M_TEMP, M_WAITOK);
- sc->m = m;
- sc->bp = bp;
- sc->object = object;
- sc->foff = foff;
- sc->size = size;
- sc->count = count;
- sc->unmapped = unmapped;
- sc->reqpage = reqpage;
- sc->kva = kva;
+ d->m = m;
+ d->bp = bp;
+ d->object = object;
+ d->foff = foff;
+ d->size = size;
+ d->count = count;
+ d->unmapped = unmapped;
+ d->reqpage = reqpage;
+ d->kva = kva;
- sc->iodone = iodone;
- sc->arg = arg;
+ d->iodone = iodone;
+ d->arg = arg;
bp->b_iodone = vnode_pager_generic_getpages_done_async;
- bp->b_caller1 = sc;
+ bp->b_caller1 = d;
BUF_KERNPROC(bp);
bstrategy(bp);
/* Good bye! */
} else {
- struct getpages_softc sc;
+ struct getpages_data d;
- sc.m = m;
- sc.bp = bp;
- sc.object = object;
- sc.foff = foff;
- sc.size = size;
- sc.count = count;
- sc.unmapped = unmapped;
- sc.reqpage = reqpage;
- sc.kva = kva;
+ d.m = m;
+ d.bp = bp;
+ d.object = object;
+ d.foff = foff;
+ d.size = size;
+ d.count = count;
+ d.unmapped = unmapped;
+ d.reqpage = reqpage;
+ d.kva = kva;
bp->b_iodone = bdone;
bstrategy(bp);
bwait(bp, PVM, "vnread");
- error = vnode_pager_generic_getpages_done(&sc);
+ error = vnode_pager_generic_getpages_done(&d);
}
return (error ? VM_PAGER_ERROR : VM_PAGER_OK);
@@ -1056,71 +1056,59 @@ vnode_pager_generic_getpages(struct vnod
static void
vnode_pager_generic_getpages_done_async(struct buf *bp)
{
- struct getpages_softc *sc = bp->b_caller1;
+ struct getpages_data *d = bp->b_caller1;
int error;
- error = vnode_pager_generic_getpages_done(sc);
- vm_page_xunbusy(sc->m[sc->reqpage]);
- sc->iodone(sc->arg, error);
- free(sc, M_TEMP);
+ error = vnode_pager_generic_getpages_done(d);
+ vm_page_xunbusy(d->m[d->reqpage]);
+ d->iodone(d->arg, error);
+ free(d, M_TEMP);
}
static int
-vnode_pager_generic_getpages_done(struct getpages_softc *sc)
+vnode_pager_generic_getpages_done(struct getpages_data *d)
{
- vm_object_t object;
- vm_offset_t kva;
- vm_page_t *m;
- struct buf *bp;
- off_t foff, tfoff, nextoff;
- int i, size, count, unmapped, reqpage;
- int error = 0;
-
- m = sc->m;
- bp = sc->bp;
- object = sc->object;
- foff = sc->foff;
- size = sc->size;
- count = sc->count;
- unmapped = sc->unmapped;
- reqpage = sc->reqpage;
- kva = sc->kva;
+ off_t tfoff, nextoff;
+ int i, error;
- if ((bp->b_ioflags & BIO_ERROR) != 0)
+ if ((d->bp->b_ioflags & BIO_ERROR) != 0)
error = EIO;
+ else
+ error = 0;
- if (error == 0 && size != count * PAGE_SIZE) {
- if ((bp->b_flags & B_UNMAPPED) != 0) {
- bp->b_flags &= ~B_UNMAPPED;
- pmap_qenter(kva, m, count);
+ if (error == 0 && d->size != d->count * PAGE_SIZE) {
+ if ((d->bp->b_flags & B_UNMAPPED) != 0) {
+ d->bp->b_flags &= ~B_UNMAPPED;
+ pmap_qenter(d->kva, d->m, d->count);
}
- bzero((caddr_t)kva + size, PAGE_SIZE * count - size);
+ bzero((caddr_t)d->kva + d->size,
+ PAGE_SIZE * d->count - d->size);
}
- if ((bp->b_flags & B_UNMAPPED) == 0)
- pmap_qremove(kva, count);
- if (unmapped) {
- bp->b_data = (caddr_t)kva;
- bp->b_kvabase = (caddr_t)kva;
- bp->b_flags &= ~B_UNMAPPED;
- for (i = 0; i < count; i++)
- bp->b_pages[i] = NULL;
+ if ((d->bp->b_flags & B_UNMAPPED) == 0)
+ pmap_qremove(d->kva, d->count);
+ if (d->unmapped) {
+ d->bp->b_data = (caddr_t)d->kva;
+ d->bp->b_kvabase = (caddr_t)d->kva;
+ d->bp->b_flags &= ~B_UNMAPPED;
+ for (i = 0; i < d->count; i++)
+ d->bp->b_pages[i] = NULL;
}
/*
* free the buffer header back to the swap buffer pool
*/
- bp->b_vp = NULL;
- pbrelbo(bp);
- relpbuf(bp, &vnode_pbuf_freecnt);
+ d->bp->b_vp = NULL;
+ pbrelbo(d->bp);
+ relpbuf(d->bp, &vnode_pbuf_freecnt);
- VM_OBJECT_WLOCK(object);
- for (i = 0, tfoff = foff; i < count; i++, tfoff = nextoff) {
+ VM_OBJECT_WLOCK(d->object);
+ for (i = 0, tfoff = d->foff; i < d->count; i++, tfoff = nextoff) {
vm_page_t mt;
nextoff = tfoff + PAGE_SIZE;
- mt = m[i];
+ mt = d->m[i];
- if (nextoff <= object->un_pager.vnp.vnp_size) {
+ if (nextoff <= d->object->un_pager.vnp.vnp_size) {
/*
* Read filled up entire page.
*/
@@ -1140,17 +1128,17 @@ vnode_pager_generic_getpages_done(struct
* read.
*/
vm_page_set_valid_range(mt, 0,
- object->un_pager.vnp.vnp_size - tfoff);
+ d->object->un_pager.vnp.vnp_size - tfoff);
KASSERT((mt->dirty & vm_page_bits(0,
- object->un_pager.vnp.vnp_size - tfoff)) == 0,
+ d->object->un_pager.vnp.vnp_size - tfoff)) == 0,
("vnode_pager_generic_getpages: page %p is dirty",
mt));
}
- if (i != reqpage)
+ if (i != d->reqpage)
vm_page_readahead_finish(mt);
}
- VM_OBJECT_WUNLOCK(object);
+ VM_OBJECT_WUNLOCK(d->object);
if (error) {
printf("vnode_pager_getpages: I/O read error\n");
}
More information about the svn-src-projects
mailing list