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,