Subject: More on CLUSTERED_PAGEOUT
To: None <tech-kern@NetBSD.ORG>
From: Thor Lancelot Simon <tls@panix.com>
List: tech-kern
Date: 02/01/1997 12:24:00
So, a kernel built with CLUSTERED_PAGEOUT *almost* works.  When I force it to
swap heavily, I get messages like this:

swap_pager_clean: clean of page 79be000 failed
swap_pager_clean: clean of page 79bf000 failed
swap_pager_clean: clean of page 79c0000 failed
swap_pager_clean: clean of page 79c1000 failed
swap_pager_clean: clean of page 79c2000 failed
swap_pager_clean: clean of page 79c3000 failed
swap_pager_clean: clean of page 79c4000 failed

Which some debugging show to ultimately issue from the following code in
sys/vm/vm_swap.c:

                off = bp->b_blkno % dmmax;
                if (off+sz > dmmax) {
                        bp->b_error = EINVAL;
                        bp->b_flags |= B_ERROR;
                        biodone(bp);
                        return; 
                }

I am rather bemused about how this can happen, since the clustering code in
swap_pager.c explicitly checks to ensure that clusters are smaller than both
dmmax and MAXPHYS.

Any ideas?

Thor