Author: kib
Date: Mon Mar 30 21:42:46 2020
New Revision: 359464
URL: https://svnweb.freebsd.org/changeset/base/359464

Log:
  buffer pager: skip bogus pages.
  
  We cannot validate bogus page by reading a buffer.
  
  PR:   244713
  Reviewed by:  glebius, markj
  Tested by:    pho
  Sponsored by: The FreeBSD Foundation
  MFC after:    1 week
  Differential revision:        https://reviews.freebsd.org/D24038

Modified:
  head/sys/kern/vfs_bio.c

Modified: head/sys/kern/vfs_bio.c
==============================================================================
--- head/sys/kern/vfs_bio.c     Mon Mar 30 21:40:35 2020        (r359463)
+++ head/sys/kern/vfs_bio.c     Mon Mar 30 21:42:46 2020        (r359464)
@@ -5154,12 +5154,16 @@ vfs_bio_getpages(struct vnode *vp, vm_page_t *ma, int 
        br_flags = (mp != NULL && (mp->mnt_kern_flag & MNTK_UNMAPPED_BUFS)
            != 0) ? GB_UNMAPPED : 0;
 again:
-       for (i = 0; i < count; i++)
-               vm_page_busy_downgrade(ma[i]);
+       for (i = 0; i < count; i++) {
+               if (ma[i] != bogus_page)
+                       vm_page_busy_downgrade(ma[i]);
+       }
 
        lbnp = -1;
        for (i = 0; i < count; i++) {
                m = ma[i];
+               if (m == bogus_page)
+                       continue;
 
                /*
                 * Pages are shared busy and the object lock is not
@@ -5228,6 +5232,8 @@ end_pages:
 
        redo = false;
        for (i = 0; i < count; i++) {
+               if (ma[i] == bogus_page)
+                       continue;
                if (vm_page_busy_tryupgrade(ma[i]) == 0) {
                        vm_page_sunbusy(ma[i]);
                        ma[i] = vm_page_grab_unlocked(object, ma[i]->pindex,
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to