2001-03-08 18:26:25

by Philipp Rumpf

[permalink] [raw]
Subject: [PATCH] ramdisk/VM fix

With the current rd.c code, we can get into a situation where there is
a buffer-only page for data which is also in a page cache page with
page->buffers != NULL. The current vmscan.c code never frees the page
cache page in this scenario, effectively doubling ramdisk memory
requirements.

Linus, I think this is a bugfix (tested against -ac kernels):

diff -ur linux/include/linux/swap.h linux-prumpf/include/linux/swap.h
--- linux/include/linux/swap.h Thu Mar 8 10:01:30 2001
+++ linux-prumpf/include/linux/swap.h Thu Mar 8 10:14:12 2001
@@ -284,7 +284,7 @@
#endif

#define page_ramdisk(page) \
- (page->buffers && (MAJOR(page->buffers->b_dev) == RAMDISK_MAJOR))
+ (page->buffers && (MAJOR(page->buffers->b_dev) == RAMDISK_MAJOR) && buffer_protected(page->buffers))

extern spinlock_t swaplock;


I don't think I'm missing anything important ...