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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/nfs/nfs3_vnops.c
          +++ new/usr/src/uts/common/fs/nfs/nfs3_vnops.c
↓ open down ↓ 22 lines elided ↑ open up ↑
  23   23   * Use is subject to license terms.
  24   24   */
  25   25  
  26   26  /*
  27   27   *      Copyright (c) 1983,1984,1985,1986,1987,1988,1989 AT&T.
  28   28   *      All rights reserved.
  29   29   */
  30   30  
  31   31  /*
  32   32   * Copyright (c) 2013, Joyent, Inc. All rights reserved.
       33 + * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  33   34   */
  34   35  
  35   36  #include <sys/param.h>
  36   37  #include <sys/types.h>
  37   38  #include <sys/systm.h>
  38   39  #include <sys/cred.h>
  39   40  #include <sys/time.h>
  40   41  #include <sys/vnode.h>
  41   42  #include <sys/vfs.h>
  42   43  #include <sys/vfs_opreg.h>
↓ open down ↓ 4535 lines elided ↑ open up ↑
4578 4579           * operation the local file size might not be extended yet.
4579 4580           * In this case we want to be able to return pages of zeroes.
4580 4581           */
4581 4582          if (off + len > rp->r_size + PAGEOFFSET && seg != segkmap) {
4582 4583                  mutex_exit(&rp->r_statelock);
4583 4584                  return (EFAULT);                /* beyond EOF */
4584 4585          }
4585 4586  
4586 4587          mutex_exit(&rp->r_statelock);
4587 4588  
4588      -        if (len <= PAGESIZE) {
4589      -                error = nfs3_getapage(vp, off, len, protp, pl, plsz,
4590      -                    seg, addr, rw, cr);
4591      -        } else {
4592      -                error = pvn_getpages(nfs3_getapage, vp, off, len, protp,
4593      -                    pl, plsz, seg, addr, rw, cr);
4594      -        }
     4589 +        error = pvn_getpages(nfs3_getapage, vp, off, len, protp,
     4590 +            pl, plsz, seg, addr, rw, cr);
4595 4591  
4596 4592          switch (error) {
4597 4593          case NFS_EOF:
4598 4594                  nfs_purge_caches(vp, NFS_NOPURGE_DNLC, cr);
4599 4595                  goto retry;
4600 4596          case ESTALE:
4601 4597                  PURGE_STALE_FH(error, vp, cr);
4602 4598          }
4603 4599  
4604 4600          return (error);
4605 4601  }
4606 4602  
4607 4603  /*
4608      - * Called from pvn_getpages or nfs3_getpage to get a particular page.
     4604 + * Called from pvn_getpages to get a particular page.
4609 4605   */
4610 4606  /* ARGSUSED */
4611 4607  static int
4612 4608  nfs3_getapage(vnode_t *vp, u_offset_t off, size_t len, uint_t *protp,
4613 4609          page_t *pl[], size_t plsz, struct seg *seg, caddr_t addr,
4614 4610          enum seg_rw rw, cred_t *cr)
4615 4611  {
4616 4612          rnode_t *rp;
4617 4613          uint_t bsize;
4618 4614          struct buf *bp;
↓ open down ↓ 2136 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX