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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/nfs/nfs_vnops.c
          +++ new/usr/src/uts/common/fs/nfs/nfs_vnops.c
↓ open down ↓ 19 lines elided ↑ open up ↑
  20   20   */
  21   21  /*
  22   22   * Copyright (c) 1990, 2010, Oracle and/or its affiliates. All rights reserved.
  23   23   *
  24   24   *      Copyright (c) 1983,1984,1985,1986,1987,1988,1989 AT&T.
  25   25   *      All rights reserved.
  26   26   */
  27   27  
  28   28  /*
  29   29   * Copyright (c) 2013, Joyent, Inc. All rights reserved.
       30 + * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  30   31   */
  31   32  
  32   33  #include <sys/param.h>
  33   34  #include <sys/types.h>
  34   35  #include <sys/systm.h>
  35   36  #include <sys/cred.h>
  36   37  #include <sys/time.h>
  37   38  #include <sys/vnode.h>
  38   39  #include <sys/vfs.h>
  39   40  #include <sys/vfs_opreg.h>
↓ open down ↓ 3634 lines elided ↑ open up ↑
3674 3675           * operation the local file size might not be extended yet.
3675 3676           * In this case we want to be able to return pages of zeroes.
3676 3677           */
3677 3678          if (off + len > rp->r_size + PAGEOFFSET && seg != segkmap) {
3678 3679                  mutex_exit(&rp->r_statelock);
3679 3680                  return (EFAULT);                /* beyond EOF */
3680 3681          }
3681 3682  
3682 3683          mutex_exit(&rp->r_statelock);
3683 3684  
3684      -        if (len <= PAGESIZE) {
3685      -                error = nfs_getapage(vp, off, len, protp, pl, plsz,
3686      -                    seg, addr, rw, cr);
3687      -        } else {
3688      -                error = pvn_getpages(nfs_getapage, vp, off, len, protp,
3689      -                    pl, plsz, seg, addr, rw, cr);
3690      -        }
     3685 +        error = pvn_getpages(nfs_getapage, vp, off, len, protp, pl, plsz,
     3686 +            seg, addr, rw, cr);
3691 3687  
3692 3688          switch (error) {
3693 3689          case NFS_EOF:
3694 3690                  nfs_purge_caches(vp, NFS_NOPURGE_DNLC, cr);
3695 3691                  goto retry;
3696 3692          case ESTALE:
3697 3693                  PURGE_STALE_FH(error, vp, cr);
3698 3694          }
3699 3695  
3700 3696          return (error);
3701 3697  }
3702 3698  
3703 3699  /*
3704      - * Called from pvn_getpages or nfs_getpage to get a particular page.
     3700 + * Called from pvn_getpages to get a particular page.
3705 3701   */
3706 3702  /* ARGSUSED */
3707 3703  static int
3708 3704  nfs_getapage(vnode_t *vp, u_offset_t off, size_t len, uint_t *protp,
3709 3705          page_t *pl[], size_t plsz, struct seg *seg, caddr_t addr,
3710 3706          enum seg_rw rw, cred_t *cr)
3711 3707  {
3712 3708          rnode_t *rp;
3713 3709          uint_t bsize;
3714 3710          struct buf *bp;
↓ open down ↓ 1386 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX