Module Name: src Committed By: yamt Date: Wed Jan 25 00:41:37 UTC 2012
Modified Files: src/sys/fs/tmpfs [yamt-pagecache]: tmpfs_vnops.c src/sys/nfs [yamt-pagecache]: nfs_bio.c src/sys/ufs/ufs [yamt-pagecache]: ufs_readwrite.c src/sys/uvm [yamt-pagecache]: uvm_loan.c uvm_loan.h Log Message: uvm_loanabj: take an access pattern hint. To generate a diff of this commit: cvs rdiff -u -r1.92.2.1 -r1.92.2.2 src/sys/fs/tmpfs/tmpfs_vnops.c cvs rdiff -u -r1.188.2.2 -r1.188.2.3 src/sys/nfs/nfs_bio.c cvs rdiff -u -r1.99.2.1 -r1.99.2.2 src/sys/ufs/ufs/ufs_readwrite.c cvs rdiff -u -r1.81.2.12 -r1.81.2.13 src/sys/uvm/uvm_loan.c cvs rdiff -u -r1.17.4.1 -r1.17.4.2 src/sys/uvm/uvm_loan.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/fs/tmpfs/tmpfs_vnops.c diff -u src/sys/fs/tmpfs/tmpfs_vnops.c:1.92.2.1 src/sys/fs/tmpfs/tmpfs_vnops.c:1.92.2.2 --- src/sys/fs/tmpfs/tmpfs_vnops.c:1.92.2.1 Wed Jan 4 16:43:37 2012 +++ src/sys/fs/tmpfs/tmpfs_vnops.c Wed Jan 25 00:41:37 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: tmpfs_vnops.c,v 1.92.2.1 2012/01/04 16:43:37 yamt Exp $ */ +/* $NetBSD: tmpfs_vnops.c,v 1.92.2.2 2012/01/25 00:41:37 yamt Exp $ */ /* * Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.92.2.1 2012/01/04 16:43:37 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.92.2.2 2012/01/25 00:41:37 yamt Exp $"); #include <sys/param.h> #include <sys/dirent.h> @@ -545,6 +545,7 @@ tmpfs_read(void *v) const int ioflag = ap->a_ioflag; tmpfs_node_t *node; struct uvm_object *uobj; + const int advice = IO_ADV_DECODE(ioflag); int error; KASSERT(VOP_ISLOCKED(vp)); @@ -562,7 +563,7 @@ tmpfs_read(void *v) error = 0; if (uio->uio_offset + uio->uio_resid <= node->tn_size) { - uvm_loanobj(&vp->v_uobj, uio); + uvm_loanobj(&vp->v_uobj, uio, advice); } while (error == 0 && uio->uio_resid > 0) { vsize_t len; @@ -574,7 +575,7 @@ tmpfs_read(void *v) if (len == 0) { break; } - error = ubc_uiomove(uobj, uio, len, IO_ADV_DECODE(ioflag), + error = ubc_uiomove(uobj, uio, len, advice, UBC_READ | UBC_PARTIALOK | UBC_UNMAP_FLAG(vp)); } return error; Index: src/sys/nfs/nfs_bio.c diff -u src/sys/nfs/nfs_bio.c:1.188.2.2 src/sys/nfs/nfs_bio.c:1.188.2.3 --- src/sys/nfs/nfs_bio.c:1.188.2.2 Wed Jan 4 16:43:37 2012 +++ src/sys/nfs/nfs_bio.c Wed Jan 25 00:41:36 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: nfs_bio.c,v 1.188.2.2 2012/01/04 16:43:37 yamt Exp $ */ +/* $NetBSD: nfs_bio.c,v 1.188.2.3 2012/01/25 00:41:36 yamt Exp $ */ /* * Copyright (c) 1989, 1993 @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nfs_bio.c,v 1.188.2.2 2012/01/04 16:43:37 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nfs_bio.c,v 1.188.2.3 2012/01/25 00:41:36 yamt Exp $"); #ifdef _KERNEL_OPT #include "opt_nfs.h" @@ -90,7 +90,6 @@ nfs_bioread(struct vnode *vp, struct uio int enough = 0; struct dirent *dp, *pdp, *edp, *ep; off_t curoff = 0; - int advice; struct lwp *l = curlwp; #ifdef DIAGNOSTIC @@ -135,6 +134,8 @@ nfs_bioread(struct vnode *vp, struct uio } do { + int advice; + /* * Don't cache symlinks. */ @@ -148,7 +149,7 @@ nfs_bioread(struct vnode *vp, struct uio advice = IO_ADV_DECODE(ioflag); if (uio->uio_offset + uio->uio_resid <= np->n_size) { - uvm_loanobj(&vp->v_uobj, uio); + uvm_loanobj(&vp->v_uobj, uio, advice); } while (uio->uio_resid > 0) { vsize_t bytelen; Index: src/sys/ufs/ufs/ufs_readwrite.c diff -u src/sys/ufs/ufs/ufs_readwrite.c:1.99.2.1 src/sys/ufs/ufs/ufs_readwrite.c:1.99.2.2 --- src/sys/ufs/ufs/ufs_readwrite.c:1.99.2.1 Wed Jan 4 16:43:37 2012 +++ src/sys/ufs/ufs/ufs_readwrite.c Wed Jan 25 00:41:36 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_readwrite.c,v 1.99.2.1 2012/01/04 16:43:37 yamt Exp $ */ +/* $NetBSD: ufs_readwrite.c,v 1.99.2.2 2012/01/25 00:41:36 yamt Exp $ */ /*- * Copyright (c) 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.99.2.1 2012/01/04 16:43:37 yamt Exp $"); +__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.99.2.2 2012/01/25 00:41:36 yamt Exp $"); #ifdef LFS_READWRITE #define FS struct lfs @@ -124,7 +124,7 @@ READ(void *v) const int advice = IO_ADV_DECODE(ap->a_ioflag); if (uio->uio_offset + uio->uio_resid <= vp->v_size) { - uvm_loanobj(&vp->v_uobj, uio); + uvm_loanobj(&vp->v_uobj, uio, advice); } while (uio->uio_resid > 0) { if (ioflag & IO_DIRECT) { Index: src/sys/uvm/uvm_loan.c diff -u src/sys/uvm/uvm_loan.c:1.81.2.12 src/sys/uvm/uvm_loan.c:1.81.2.13 --- src/sys/uvm/uvm_loan.c:1.81.2.12 Wed Jan 18 02:09:06 2012 +++ src/sys/uvm/uvm_loan.c Wed Jan 25 00:41:36 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_loan.c,v 1.81.2.12 2012/01/18 02:09:06 yamt Exp $ */ +/* $NetBSD: uvm_loan.c,v 1.81.2.13 2012/01/25 00:41:36 yamt Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_loan.c,v 1.81.2.12 2012/01/18 02:09:06 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_loan.c,v 1.81.2.13 2012/01/25 00:41:36 yamt Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -110,7 +110,7 @@ static void uvm_unloananon(struct vm_ano static void uvm_unloanpage(struct vm_page **, int); static int uvm_loanpage(struct vm_page **, int); static int uvm_loanobj_read(struct vm_map *, vaddr_t, size_t, - struct uvm_object *, off_t); + struct uvm_object *, off_t, int); /* @@ -1296,7 +1296,7 @@ uvm_loanbreak_anon(struct vm_anon *anon) } int -uvm_loanobj(struct uvm_object *uobj, struct uio *uio) +uvm_loanobj(struct uvm_object *uobj, struct uio *uio, int advice) { struct iovec *iov; struct vm_map *map; @@ -1347,7 +1347,7 @@ uvm_loanobj(struct uvm_object *uobj, str va = (vaddr_t)iov->iov_base; len = MIN(iov->iov_len, MAXPHYS); error = uvm_loanobj_read(map, va, len, uobj, - uio->uio_offset); + uio->uio_offset, advice); if (error) { goto out; } @@ -1374,7 +1374,7 @@ out: static int uvm_loanobj_read(struct vm_map *map, vaddr_t va, size_t len, - struct uvm_object *uobj, off_t off) + struct uvm_object *uobj, off_t off, int advice) { unsigned int npages = len >> PAGE_SHIFT; struct vm_page *pgs[MAXPAGES]; @@ -1492,7 +1492,7 @@ retry: memset(pgs, 0, sizeof(pgs)); mutex_enter(uobj->vmobjlock); error = (*uobj->pgops->pgo_get)(uobj, off, pgs, &npages, 0, - VM_PROT_READ, 0, PGO_SYNCIO); + VM_PROT_READ, advice, PGO_SYNCIO); if (error) { UVMHIST_LOG(ubchist, "getpages -> %d", error,0,0,0); return error; Index: src/sys/uvm/uvm_loan.h diff -u src/sys/uvm/uvm_loan.h:1.17.4.1 src/sys/uvm/uvm_loan.h:1.17.4.2 --- src/sys/uvm/uvm_loan.h:1.17.4.1 Mon Dec 26 16:03:11 2011 +++ src/sys/uvm/uvm_loan.h Wed Jan 25 00:41:36 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_loan.h,v 1.17.4.1 2011/12/26 16:03:11 yamt Exp $ */ +/* $NetBSD: uvm_loan.h,v 1.17.4.2 2012/01/25 00:41:36 yamt Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -50,7 +50,7 @@ int uvm_loanuobjpages(struct uvm_object struct vm_page **); struct vm_page *uvm_loanbreak(struct vm_page *); int uvm_loanbreak_anon(struct vm_anon *); -int uvm_loanobj(struct uvm_object *, struct uio *); +int uvm_loanobj(struct uvm_object *, struct uio *, int); void uvm_loan_resolve_orphan(struct vm_page *, bool); #endif /* _KERNEL */