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 */