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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/pcfs/pc_vnops.c
          +++ new/usr/src/uts/common/fs/pcfs/pc_vnops.c
↓ open down ↓ 18 lines elided ↑ open up ↑
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   */
  26   26  
  27   27  /*
  28   28   * Copyright (c) 2013, Joyent, Inc. All rights reserved.
       29 + * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  29   30   */
  30   31  
  31   32  #include <sys/param.h>
  32   33  #include <sys/t_lock.h>
  33   34  #include <sys/systm.h>
  34   35  #include <sys/sysmacros.h>
  35   36  #include <sys/user.h>
  36   37  #include <sys/buf.h>
  37   38  #include <sys/stat.h>
  38   39  #include <sys/vfs.h>
↓ open down ↓ 1380 lines elided ↑ open up ↑
1419 1420                          break;
1420 1421          }
1421 1422          if (bp)
1422 1423                  brelse(bp);
1423 1424          pc_unlockfs(fsp);
1424 1425          return (error);
1425 1426  }
1426 1427  
1427 1428  
1428 1429  /*
1429      - * Called from pvn_getpages or pcfs_getpage to get a particular page.
1430      - * When we are called the pcfs is already locked.
     1430 + * Called from pvn_getpages to get a particular page.  When we are called
     1431 + * the pcfs is already locked.
1431 1432   */
1432 1433  /*ARGSUSED*/
1433 1434  static int
1434 1435  pcfs_getapage(
1435 1436          struct vnode *vp,
1436 1437          u_offset_t off,
1437 1438          size_t len,
1438 1439          uint_t *protp,
1439 1440          page_t *pl[],           /* NULL if async IO is requested */
1440 1441          size_t plsz,
↓ open down ↓ 153 lines elided ↑ open up ↑
1594 1595          if (vp->v_flag & VNOMAP)
1595 1596                  return (ENOSYS);
1596 1597          ASSERT(off <= UINT32_MAX);
1597 1598          err = pc_lockfs(fsp, 0, 0);
1598 1599          if (err)
1599 1600                  return (err);
1600 1601          if (protp != NULL)
1601 1602                  *protp = PROT_ALL;
1602 1603  
1603 1604          ASSERT((off & PAGEOFFSET) == 0);
1604      -        if (len <= PAGESIZE) {
1605      -                err = pcfs_getapage(vp, off, len, protp, pl,
1606      -                    plsz, seg, addr, rw, cr);
1607      -        } else {
1608      -                err = pvn_getpages(pcfs_getapage, vp, off,
1609      -                    len, protp, pl, plsz, seg, addr, rw, cr);
1610      -        }
     1605 +        err = pvn_getpages(pcfs_getapage, vp, off, len, protp, pl, plsz,
     1606 +            seg, addr, rw, cr);
     1607 +
1611 1608          pc_unlockfs(fsp);
1612 1609          return (err);
1613 1610  }
1614 1611  
1615 1612  
1616 1613  /*
1617 1614   * Flags are composed of {B_INVAL, B_FREE, B_DONTNEED, B_FORCE}
1618 1615   * If len == 0, do from off to EOF.
1619 1616   *
1620 1617   * The normal cases should be len == 0 & off == 0 (entire vp list),
↓ open down ↓ 822 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX