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

@@ -18,10 +18,11 @@
  *
  * CDDL HEADER END
  */
 /*
  * Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  */
 
 #include <sys/param.h>
 #include <sys/types.h>
 #include <sys/systm.h>

@@ -7383,17 +7384,12 @@
                         if (seg != segkmap) {
                                 error = EFAULT;
                                 break;
                         }
                 }
-                if (len <= PAGESIZE)
-                        error = cachefs_getapage(vp, (u_offset_t)off, len,
-                            protp, pl, plsz, seg, addr, rw, cr);
-                else
-                        error = pvn_getpages(cachefs_getapage, vp,
-                            (u_offset_t)off, len, protp, pl, plsz, seg, addr,
-                            rw, cr);
+                error = pvn_getpages(cachefs_getapage, vp, (u_offset_t)off,
+                    len, protp, pl, plsz, seg, addr, rw, cr);
                 if (error == 0)
                         break;
 
                 if (((cp->c_flags & CN_NOCACHE) && (error == ENOSPC)) ||
                     error == EAGAIN) {

@@ -7409,20 +7405,13 @@
                                 continue;
                         }
                 } else {
                         if (CFS_TIMEOUT(fscp, error)) {
                                 if (cachefs_cd_access_miss(fscp)) {
-                                        if (len <= PAGESIZE)
-                                                error = cachefs_getapage_back(
-                                                    vp, (u_offset_t)off,
-                                                    len, protp, pl,
-                                                    plsz, seg, addr, rw, cr);
-                                        else
                                                 error = pvn_getpages(
                                                     cachefs_getapage_back, vp,
-                                                    (u_offset_t)off, len,
-                                                    protp, pl,
+                                            (u_offset_t)off, len, protp, pl,
                                                     plsz, seg, addr, rw, cr);
                                         if (!CFS_TIMEOUT(fscp, error) &&
                                             (error != EAGAIN))
                                                 break;
                                         delay(5*hz);

@@ -7496,11 +7485,11 @@
 
         return (error);
 }
 
 /*
- * Called from pvn_getpages or cachefs_getpage to get a particular page.
+ * Called from pvn_getpages to get a particular page.
  */
 /*ARGSUSED*/
 static int
 cachefs_getapage(struct vnode *vp, u_offset_t off, size_t len, uint_t *protp,
         struct page *pl[], size_t plsz, struct seg *seg, caddr_t addr,