Print this page
5382 pvn_getpages handles lengths <= PAGESIZE just fine
*** 21,31 ****
/*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
! * Copyright 2012 Nexenta Systems, Inc. All rights reserved.
*/
/*
* Copyright 1983,1984,1985,1986,1987,1988,1989 AT&T.
* All Rights Reserved
--- 21,31 ----
/*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
! * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
*/
/*
* Copyright 1983,1984,1985,1986,1987,1988,1989 AT&T.
* All Rights Reserved
*** 9785,9807 ****
return (EFAULT); /* beyond EOF */
}
mutex_exit(&rp->r_statelock);
- if (len <= PAGESIZE) {
- error = nfs4_getapage(vp, off, len, protp, pl, plsz,
- seg, addr, rw, cr);
- NFS4_DEBUG(nfs4_pageio_debug && error,
- (CE_NOTE, "getpage error %d; off=%lld, "
- "len=%lld", error, off, (u_longlong_t)len));
- } else {
error = pvn_getpages(nfs4_getapage, vp, off, len, protp,
pl, plsz, seg, addr, rw, cr);
NFS4_DEBUG(nfs4_pageio_debug && error,
! (CE_NOTE, "getpages error %d; off=%lld, "
! "len=%lld", error, off, (u_longlong_t)len));
! }
switch (error) {
case NFS_EOF:
nfs4_purge_caches(vp, NFS4_NOPURGE_DNLC, cr, FALSE);
goto retry;
--- 9785,9799 ----
return (EFAULT); /* beyond EOF */
}
mutex_exit(&rp->r_statelock);
error = pvn_getpages(nfs4_getapage, vp, off, len, protp,
pl, plsz, seg, addr, rw, cr);
NFS4_DEBUG(nfs4_pageio_debug && error,
! (CE_NOTE, "getpages error %d; off=%lld, len=%lld",
! error, off, (u_longlong_t)len));
switch (error) {
case NFS_EOF:
nfs4_purge_caches(vp, NFS4_NOPURGE_DNLC, cr, FALSE);
goto retry;
*** 9811,9821 ****
return (error);
}
/*
! * Called from pvn_getpages or nfs4_getpage to get a particular page.
*/
/* ARGSUSED */
static int
nfs4_getapage(vnode_t *vp, u_offset_t off, size_t len, uint_t *protp,
page_t *pl[], size_t plsz, struct seg *seg, caddr_t addr,
--- 9803,9813 ----
return (error);
}
/*
! * Called from pvn_getpages to get a particular page.
*/
/* ARGSUSED */
static int
nfs4_getapage(vnode_t *vp, u_offset_t off, size_t len, uint_t *protp,
page_t *pl[], size_t plsz, struct seg *seg, caddr_t addr,