Author: avg
Date: Thu Jan 18 12:59:04 2018
New Revision: 328126
URL: https://svnweb.freebsd.org/changeset/base/328126

Log:
  correct read-ahead calculations in vfs_bio_getpages
  
  Previously the calculations were done as if the requested region
  ended at the start of the last requested page, not its end.
  The problem as actually quite minor as it affected only stats and
  page prefaulting, not the actual page data, and only with specific
  parameters.
  
  Reviewed by:  kib (previous version)
  MFC after:    2 weeks

Modified:
  head/sys/kern/vfs_bio.c

Modified: head/sys/kern/vfs_bio.c
==============================================================================
--- head/sys/kern/vfs_bio.c     Thu Jan 18 12:14:24 2018        (r328125)
+++ head/sys/kern/vfs_bio.c     Thu Jan 18 12:59:04 2018        (r328126)
@@ -4802,7 +4802,14 @@ vfs_bio_getpages(struct vnode *vp, vm_page_t *ma, int 
        la = IDX_TO_OFF(ma[count - 1]->pindex);
        if (la >= object->un_pager.vnp.vnp_size)
                return (VM_PAGER_BAD);
-       lpart = la + PAGE_SIZE > object->un_pager.vnp.vnp_size;
+
+       /*
+        * Change the meaning of la from where the last requested page starts
+        * to where it ends, because that's the end of the requested region
+        * and the start of the potential read-ahead region.
+        */
+       la += PAGE_SIZE;
+       lpart = la > object->un_pager.vnp.vnp_size;
        bo_bs = get_blksize(vp, get_lblkno(vp, IDX_TO_OFF(ma[0]->pindex)));
 
        /*
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to