Author: kib
Date: Tue Nov 22 10:06:39 2016
New Revision: 308969
URL: https://svnweb.freebsd.org/changeset/base/308969

Log:
  Restore vnode pager statistic for buffer pagers.
  
  Reviewed by:  alc, markj
  Tested by:    pho
  Sponsored by: The FreeBSD Foundation
  MFC after:    1 week
  Differential revision:        https://reviews.freebsd.org/D8585

Modified:
  head/sys/kern/vfs_bio.c

Modified: head/sys/kern/vfs_bio.c
==============================================================================
--- head/sys/kern/vfs_bio.c     Tue Nov 22 09:52:33 2016        (r308968)
+++ head/sys/kern/vfs_bio.c     Tue Nov 22 10:06:39 2016        (r308969)
@@ -4707,7 +4707,7 @@ vfs_bio_getpages(struct vnode *vp, vm_pa
        daddr_t lbn, lbnp;
        vm_ooffset_t la, lb, poff, poffe;
        long bsize;
-       int bo_bs, br_flags, error, i;
+       int bo_bs, br_flags, error, i, pgsin, pgsin_a, pgsin_b;
        bool redo, lpart;
 
        object = vp->v_object;
@@ -4717,17 +4717,26 @@ vfs_bio_getpages(struct vnode *vp, vm_pa
                return (VM_PAGER_BAD);
        lpart = la + PAGE_SIZE > object->un_pager.vnp.vnp_size;
        bo_bs = get_blksize(vp, get_lblkno(vp, IDX_TO_OFF(ma[0]->pindex)));
-       if (rbehind != NULL) {
-               lb = IDX_TO_OFF(ma[0]->pindex);
-               *rbehind = OFF_TO_IDX(lb - rounddown2(lb, bo_bs));
-       }
-       if (rahead != NULL) {
-               *rahead = OFF_TO_IDX(roundup2(la, bo_bs) - la);
-               if (la + IDX_TO_OFF(*rahead) >= object->un_pager.vnp.vnp_size) {
-                       *rahead = OFF_TO_IDX(roundup2(object->un_pager.
-                           vnp.vnp_size, PAGE_SIZE) - la);
-               }
-       }
+
+       /*
+        * Calculate read-ahead, behind and total pages.
+        */
+       pgsin = count;
+       lb = IDX_TO_OFF(ma[0]->pindex);
+       pgsin_b = OFF_TO_IDX(lb - rounddown2(lb, bo_bs));
+       pgsin += pgsin_b;
+       if (rbehind != NULL)
+               *rbehind = pgsin_b;
+       pgsin_a = OFF_TO_IDX(roundup2(la, bo_bs) - la);
+       if (la + IDX_TO_OFF(pgsin_a) >= object->un_pager.vnp.vnp_size)
+               pgsin_a = OFF_TO_IDX(roundup2(object->un_pager.vnp.vnp_size,
+                   PAGE_SIZE) - la);
+       pgsin += pgsin_a;
+       if (rahead != NULL)
+               *rahead = pgsin_a;
+       PCPU_INC(cnt.v_vnodein);
+       PCPU_ADD(cnt.v_vnodepgsin, pgsin);
+
        br_flags = (mp != NULL && (mp->mnt_kern_flag & MNTK_UNMAPPED_BUFS)
            != 0) ? GB_UNMAPPED : 0;
        VM_OBJECT_WLOCK(object);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to