Re: New pre-2.0.31 patches..

Dr. Werner Fink (werner@suse.de)
Tue, 5 Aug 1997 13:41:26 +0200


> Anybody who has critical patches missing from the current pre-patch
> (2.0.31-2), please speak up. Similarly, when you notice that it doesn't
> even compile or it doesn't actually boot or some other nagging problem,
> write me a line saying so,

There are still missed some critical net patches (e.g isdn)
... and not to forget some drivers and driver updates (e.g bsdncr).

One patch is really critical: from Krzysztof Strasburger for the correct
update of nr_swap_cache_pages.

I've append the old mail from Krzysztof Strasburger including his
patch.

Werner

---------------------------------------------------------------------------
Date: Mon, 21 Apr 97 12:52
From: strasbur@chkw386.ch.pwr.wroc.pl (Krzysztof Strasburger)
To: linux-kernel@vger.rutgers.edu
Subject: swap cache patch - corrected

As pointed out by Werner, somebody can undef SWAP_CACHE_INFO and get
into trouble. Here is corrected version of my swap cache patch.
It introduces the counter for pages in swap cache and adds their number
to free pages.
If somebody had commennts about it and sent them to the mailing list only,
please resend to my private address. I subscribed but today.

Krzysztof Strasburger

diff -u -r linux.orig/include/linux/swap.h linux/include/linux/swap.h
--- linux.orig/include/linux/swap.h Mon Jun 3 14:38:37 1996
+++ linux/include/linux/swap.h Sat Apr 19 13:12:47 1997
@@ -34,6 +34,7 @@

extern int nr_swap_pages;
extern int nr_free_pages;
+extern int nr_swap_cache_pages;
extern atomic_t nr_async_pages;
extern int min_free_pages;
extern int free_pages_low;
@@ -113,10 +114,12 @@
swap_cache_find_total++;
#endif
entry = xchg(swap_cache + index, 0);
+ if (entry) {
#ifdef SWAP_CACHE_INFO
- if (entry)
swap_cache_find_success++;
#endif
+ nr_swap_cache_pages--;
+ }
return entry;
}

@@ -133,6 +136,7 @@
swap_cache_del_success++;
#endif
swap_free(entry);
+ nr_swap_cache_pages--;
return 1;
}
return 0;
diff -u -r linux.orig/mm/mmap.c linux/mm/mmap.c
--- linux.orig/mm/mmap.c Fri Dec 6 22:09:24 1996
+++ linux/mm/mmap.c Fri Apr 18 17:12:08 1997
@@ -55,9 +55,10 @@
long freepages;
freepages = buffermem >> PAGE_SHIFT;
freepages += page_cache_size;
- freepages >>= 1;
+/* freepages >>= 1;*/
freepages += nr_free_pages;
freepages += nr_swap_pages;
+ freepages +=nr_swap_cache_pages;
freepages -= MAP_NR(high_memory) >> 4;
return freepages > pages;
}
diff -u -r linux.orig/mm/swap_state.c linux/mm/swap_state.c
--- linux.orig/mm/swap_state.c Wed Mar 13 14:17:23 1996
+++ linux/mm/swap_state.c Fri Apr 18 17:12:11 1997
@@ -32,6 +32,8 @@
*/
unsigned long *swap_cache;

+int nr_swap_cache_pages = 0;
+
#ifdef SWAP_CACHE_INFO
unsigned long swap_cache_add_total = 0;
unsigned long swap_cache_add_success = 0;
@@ -64,6 +66,7 @@
#ifdef SWAP_CACHE_INFO
swap_cache_add_success++;
#endif
+ nr_swap_cache_pages++;
return 1;
}
return 0;
diff -u -r linux.orig/mm/swapfile.c linux/mm/swapfile.c
--- linux.orig/mm/swapfile.c Thu Apr 10 23:47:14 1997
+++ linux/mm/swapfile.c Fri Apr 18 17:12:12 1997
@@ -570,6 +570,7 @@
++val->totalswap;
}
}
+ val->freeswap += nr_swap_cache_pages;
val->freeswap <<= PAGE_SHIFT;
val->totalswap <<= PAGE_SHIFT;
return;