2002-01-21 00:19:38

by Hugh Dickins

[permalink] [raw]
Subject: [PATCH] free_swap_and_cache misses

free_swap_and_cache() often misses its purpose and leaves freeable page
in swap and cache. Wrong in mainline 2.4 and 2.5, but looks okay in -aa
(so don't bother to apply this if you're now merging that).

Hugh

--- 2.4.18-pre4/mm/swapfile.c Sun Dec 23 10:47:32 2001
+++ linux/mm/swapfile.c Sun Jan 20 23:30:52 2002
@@ -344,7 +344,7 @@
if (page) {
page_cache_get(page);
/* Only cache user (+us), or swap space full? Free it! */
- if (page_count(page) == 2 || vm_swap_full()) {
+ if (page_count(page) - !!page->buffers == 2 || vm_swap_full()) {
delete_from_swap_cache(page);
SetPageDirty(page);
}


2002-01-22 00:08:47

by J.A. Magallon

[permalink] [raw]
Subject: Re: [PATCH] free_swap_and_cache misses


On 20020121 Hugh Dickins wrote:
>free_swap_and_cache() often misses its purpose and leaves freeable page
>in swap and cache. Wrong in mainline 2.4 and 2.5, but looks okay in -aa
>(so don't bother to apply this if you're now merging that).
>
>Hugh
>
>--- 2.4.18-pre4/mm/swapfile.c Sun Dec 23 10:47:32 2001
>+++ linux/mm/swapfile.c Sun Jan 20 23:30:52 2002
>@@ -344,7 +344,7 @@
> if (page) {
> page_cache_get(page);
> /* Only cache user (+us), or swap space full? Free it! */
>- if (page_count(page) == 2 || vm_swap_full()) {
>+ if (page_count(page) - !!page->buffers == 2 || vm_swap_full()) {

Don't you trust too much on precendence, people...?

- if (page_count(page) == 2 || vm_swap_full()) {
+ if ( ((page_count(page) - !!page->buffers) == 2) || vm_swap_full() ) {

Or i'm paranoid.

--
J.A. Magallon # Let the source be with you...
mailto:[email protected]
Mandrake Linux release 8.2 (Cooker) for i586
Linux werewolf 2.4.18-pre4-beo #3 SMP Wed Jan 16 02:58:41 CET 2002 i686