Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Aug 1999 13:34:23 -0700 (PDT)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Matthew Dillon <dillon@apollo.backplane.com>
Cc:        "John W. DeBoskey" <jwd@unx.sas.com>, phk@critter.freebsd.dk (Poul-Henning Kamp), julian@whistle.com, jwd@unx.sas.com, freebsd-current@FreeBSD.ORG
Subject:   tentative fix (was Re: -current kernel problems (spec_getpages & vm_fault))
Message-ID:  <199908262034.NAA24744@apollo.backplane.com>
References:  <199908261958.PAA46391@bb01f39.unx.sas.com> <199908262013.NAA24637@apollo.backplane.com>

next in thread | previous in thread | raw e-mail | index | archive | help
    The first part of this patch is not yet part of my multipatch at 
    http://www.backplane.com/FreeBSD4/

    This is a tentative fix, but I believe it to be correct.  Until
    yesterday I was testing swap-backed VN with only one swap partition,
    otherwise this would have been found and fixed long ago :-(

    I'm doing a buildworld stress test now to make sure it's been fixed.

						-Matt

Index: swap_pager.c
===================================================================
RCS file: /home/ncvs/src/sys/vm/swap_pager.c,v
retrieving revision 1.124
diff -u -r1.124 swap_pager.c
--- swap_pager.c	1999/08/23 23:55:03	1.124
+++ swap_pager.c	1999/08/26 20:20:09
@@ -830,13 +830,19 @@
 			splx(s);
 
 			/*
-			 * Do we have to flush our current collection?
+			 * Do we have to flush our current collection?  Yes if:
+			 *
+			 *	- no swap block at this index
+			 *	- swap block is not contiguous
+			 *	- we cross a physical disk boundry in the
+			 *	  stripe.
 			 */
 
 			if (
 			    nbp && (
 			     (blk & SWAPBLK_NONE) ||
-			     nbp->b_blkno + btoc(nbp->b_bcount) != blk
+			     nbp->b_blkno + btoc(nbp->b_bcount) != blk ||
+			     ((nbp->b_blkno ^ blk) & dmmax_mask)
 			    )
 			) {
 				++cnt.v_swapin;
@@ -857,6 +863,7 @@
 				if (nbp == NULL) {
 					nbp = getchainbuf(bp, swapdev_vp, B_READ|B_ASYNC);
 					nbp->b_blkno = blk;
+					nbp->b_bcount = 0;
 					nbp->b_data = data;
 				}
 				nbp->b_bcount += PAGE_SIZE;


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199908262034.NAA24744>