kernel - SWAP CACHE part 22/many - Fix counter overflow introduced in part 21
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 22 Feb 2010 02:33:43 +0000 (18:33 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Mon, 22 Feb 2010 02:33:43 +0000 (18:33 -0800)
* vm_swapcache_inactive_heuristic can overflow, making it extremely negative
  and causing swapcache writing to cease for a long period of time.

* Two-in-one fix.  Check if it is too negative and reset it.  This also
  automatically adjusts the heuristic if the sysop manually changes
  the hysteresis to a smaller value.

sys/vm/vm_swapcache.c

index 790f029..a015088 100644 (file)
@@ -253,11 +253,16 @@ vm_swapcache_writing(vm_page_t marker)
        int count;
 
        /*
+        * Deal with an overflow of the heuristic counter or if the user
+        * manually changes the hysteresis.
+        *
         * Try to avoid small incremental pageouts by waiting for enough
         * pages to buildup in the inactive queue to hopefully get a good
         * burst in.  This heuristic is bumped by the VM system and reset
         * when our scan hits the end of the queue.
         */
+       if (vm_swapcache_inactive_heuristic < -vm_swapcache_hysteresis)
+               vm_swapcache_inactive_heuristic = -vm_swapcache_hysteresis;
        if (vm_swapcache_inactive_heuristic < 0)
                return;