version 1.64, 2005/11/02 12:39:14 |
version 1.64.2.2, 2005/11/18 08:44:55 |
|
|
#include <sys/cdefs.h> |
#include <sys/cdefs.h> |
__KERNEL_RCSID(1, "$NetBSD$"); |
__KERNEL_RCSID(1, "$NetBSD$"); |
|
|
|
#include <uvm/uvm_readahead.h> |
|
|
#ifdef LFS_READWRITE |
#ifdef LFS_READWRITE |
#define BLKSIZE(a, b, c) blksize(a, b, c) |
#define BLKSIZE(a, b, c) blksize(a, b, c) |
#define FS struct lfs |
#define FS struct lfs |
|
|
usepc = vp->v_type == VREG; |
usepc = vp->v_type == VREG; |
#endif /* !LFS_READWRITE */ |
#endif /* !LFS_READWRITE */ |
if (usepc) { |
if (usepc) { |
|
const int advice = IO_ADV_DECODE(ap->a_ioflag); |
|
|
while (uio->uio_resid > 0) { |
while (uio->uio_resid > 0) { |
bytelen = MIN(ip->i_size - uio->uio_offset, |
bytelen = MIN(ip->i_size - uio->uio_offset, |
uio->uio_resid); |
uio->uio_resid); |
|
|
|
|
win = ubc_alloc(&vp->v_uobj, uio->uio_offset, |
win = ubc_alloc(&vp->v_uobj, uio->uio_offset, |
&bytelen, UBC_READ); |
&bytelen, UBC_READ); |
|
uvm_ra_request(vp->v_ractx, advice, &vp->v_uobj, |
|
uio->uio_offset, bytelen); |
error = uiomove(win, bytelen, uio); |
error = uiomove(win, bytelen, uio); |
flags = UBC_WANT_UNMAP(vp) ? UBC_UNMAP : 0; |
flags = UBC_WANT_UNMAP(vp) ? UBC_UNMAP : 0; |
ubc_release(win, flags); |
ubc_release(win, flags); |