diff -urN v2.4.17/include/linux/pagemap.h v2.4.17-pglru/include/linux/pagemap.h --- v2.4.17/include/linux/pagemap.h Thu Dec 20 19:30:25 2001 +++ v2.4.17-pglru/include/linux/pagemap.h Tue Jan 1 14:46:04 2002 @@ -29,7 +29,7 @@ #define PAGE_CACHE_ALIGN(addr) (((addr)+PAGE_CACHE_SIZE-1)&PAGE_CACHE_MASK) #define page_cache_get(x) get_page(x) -extern void FASTCALL(page_cache_release(struct page *)); +#define page_cache_release(x) __free_page(x) static inline struct page *page_cache_alloc(struct address_space *x) { diff -urN v2.4.17/kernel/ksyms.c v2.4.17-pglru/kernel/ksyms.c --- v2.4.17/kernel/ksyms.c Tue Jan 1 14:09:35 2002 +++ v2.4.17-pglru/kernel/ksyms.c Tue Jan 1 14:46:55 2002 @@ -95,7 +95,6 @@ EXPORT_SYMBOL(alloc_pages_node); EXPORT_SYMBOL(__get_free_pages); EXPORT_SYMBOL(get_zeroed_page); -EXPORT_SYMBOL(page_cache_release); EXPORT_SYMBOL(__free_pages); EXPORT_SYMBOL(free_pages); EXPORT_SYMBOL(num_physpages); diff -urN v2.4.17/mm/page_alloc.c v2.4.17-pglru/mm/page_alloc.c --- v2.4.17/mm/page_alloc.c Mon Nov 26 23:43:08 2001 +++ v2.4.17-pglru/mm/page_alloc.c Tue Jan 1 14:44:59 2002 @@ -70,6 +70,12 @@ struct page *base; zone_t *zone; + /* Yes, think what happens when other parts of the kernel take + * a reference to a page in order to pin it for io. -ben + */ + if (PageLRU(page)) + lru_cache_del(page); + if (page->buffers) BUG(); if (page->mapping) @@ -426,15 +432,6 @@ return 0; } -void page_cache_release(struct page *page) -{ - if (!PageReserved(page) && put_page_testzero(page)) { - if (PageLRU(page)) - lru_cache_del(page); - __free_pages_ok(page, 0); - } -} - void __free_pages(struct page *page, unsigned int order) { if (!PageReserved(page) && put_page_testzero(page))