Print this page
5382 pvn_getpages handles lengths <= PAGESIZE just fine

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/nfs/nfs4_vnops.c
          +++ new/usr/src/uts/common/fs/nfs/nfs4_vnops.c
↓ open down ↓ 15 lines elided ↑ open up ↑
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
  24   24   */
  25   25  /*
  26      - * Copyright 2012 Nexenta Systems, Inc. All rights reserved.
       26 + * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  27   27   */
  28   28  
  29   29  /*
  30   30   *      Copyright 1983,1984,1985,1986,1987,1988,1989 AT&T.
  31   31   *      All Rights Reserved
  32   32   */
  33   33  
  34   34  /*
  35   35   * Copyright (c) 2013, Joyent, Inc. All rights reserved.
  36   36   */
↓ open down ↓ 9743 lines elided ↑ open up ↑
9780 9780                  NFS4_DEBUG(nfs4_pageio_debug,
9781 9781                      (CE_NOTE, "getpage beyond EOF: off=%lld, "
9782 9782                      "len=%llu, size=%llu, attrsize =%llu", off,
9783 9783                      (u_longlong_t)len, rp->r_size, rp->r_attr.va_size));
9784 9784                  mutex_exit(&rp->r_statelock);
9785 9785                  return (EFAULT);                /* beyond EOF */
9786 9786          }
9787 9787  
9788 9788          mutex_exit(&rp->r_statelock);
9789 9789  
9790      -        if (len <= PAGESIZE) {
9791      -                error = nfs4_getapage(vp, off, len, protp, pl, plsz,
9792      -                    seg, addr, rw, cr);
9793      -                NFS4_DEBUG(nfs4_pageio_debug && error,
9794      -                    (CE_NOTE, "getpage error %d; off=%lld, "
9795      -                    "len=%lld", error, off, (u_longlong_t)len));
9796      -        } else {
9797      -                error = pvn_getpages(nfs4_getapage, vp, off, len, protp,
9798      -                    pl, plsz, seg, addr, rw, cr);
9799      -                NFS4_DEBUG(nfs4_pageio_debug && error,
9800      -                    (CE_NOTE, "getpages error %d; off=%lld, "
9801      -                    "len=%lld", error, off, (u_longlong_t)len));
9802      -        }
     9790 +        error = pvn_getpages(nfs4_getapage, vp, off, len, protp,
     9791 +            pl, plsz, seg, addr, rw, cr);
     9792 +        NFS4_DEBUG(nfs4_pageio_debug && error,
     9793 +            (CE_NOTE, "getpages error %d; off=%lld, len=%lld",
     9794 +            error, off, (u_longlong_t)len));
9803 9795  
9804 9796          switch (error) {
9805 9797          case NFS_EOF:
9806 9798                  nfs4_purge_caches(vp, NFS4_NOPURGE_DNLC, cr, FALSE);
9807 9799                  goto retry;
9808 9800          case ESTALE:
9809 9801                  nfs4_purge_stale_fh(error, vp, cr);
9810 9802          }
9811 9803  
9812 9804          return (error);
9813 9805  }
9814 9806  
9815 9807  /*
9816      - * Called from pvn_getpages or nfs4_getpage to get a particular page.
     9808 + * Called from pvn_getpages to get a particular page.
9817 9809   */
9818 9810  /* ARGSUSED */
9819 9811  static int
9820 9812  nfs4_getapage(vnode_t *vp, u_offset_t off, size_t len, uint_t *protp,
9821 9813      page_t *pl[], size_t plsz, struct seg *seg, caddr_t addr,
9822 9814      enum seg_rw rw, cred_t *cr)
9823 9815  {
9824 9816          rnode4_t *rp;
9825 9817          uint_t bsize;
9826 9818          struct buf *bp;
↓ open down ↓ 6177 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX