The patch titled FS-Cache: Release page->private in failed readahead has been added to the -mm tree. Its filename is fs-cache-release-page-private-in-failed-readahead.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this From: David Howells <dhowells@xxxxxxxxxx> Cause read_cache_pages() to release page-private data on a page for which add_to_page_cache() fails or the filler function fails. This permits pages with caching references associated with them to be cleaned up. Signed-off-by: David Howells <dhowells@xxxxxxxxxx> Cc: Trond Myklebust <trond.myklebust@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- mm/readahead.c | 21 +++++++++++++++++++-- 1 files changed, 19 insertions(+), 2 deletions(-) diff -puN mm/readahead.c~fs-cache-release-page-private-in-failed-readahead mm/readahead.c --- devel/mm/readahead.c~fs-cache-release-page-private-in-failed-readahead 2006-05-12 11:37:04.000000000 -0700 +++ devel-akpm/mm/readahead.c 2006-05-12 11:37:04.000000000 -0700 @@ -14,6 +14,7 @@ #include <linux/blkdev.h> #include <linux/backing-dev.h> #include <linux/pagevec.h> +#include <linux/buffer_head.h> void default_unplug_io_fn(struct backing_dev_info *bdi, struct page *page) { @@ -118,6 +119,22 @@ static inline unsigned long get_next_ra_ #define list_to_page(head) (list_entry((head)->prev, struct page, lru)) +/* + * see if a page needs releasing upon read_cache_pages() failure + */ +static inline void read_cache_pages_release_page(struct address_space *mapping, + struct page *page) +{ + if (PagePrivate(page)) { + page->mapping = mapping; + SetPageLocked(page); + try_to_release_page(page, GFP_KERNEL); + page->mapping = NULL; + } + + page_cache_release(page); +} + /** * read_cache_pages - populate an address space with some pages, and * start reads against them. @@ -142,7 +159,7 @@ int read_cache_pages(struct address_spac page = list_to_page(pages); list_del(&page->lru); if (add_to_page_cache(page, mapping, page->index, GFP_KERNEL)) { - page_cache_release(page); + read_cache_pages_release_page(mapping, page); continue; } ret = filler(data, page); @@ -154,7 +171,7 @@ int read_cache_pages(struct address_spac victim = list_to_page(pages); list_del(&victim->lru); - page_cache_release(victim); + read_cache_pages_release_page(mapping, victim); } break; } _ Patches currently in -mm which might be from dhowells@xxxxxxxxxx are fix-can_share_swap_page-when-config_swap.patch nfs-permit-filesystem-to-override-root-dentry-on-mount.patch nfs-permit-filesystem-to-perform-statfs-with-a-known-root-dentry.patch nfs-abstract-out-namespace-initialisation.patch nfs-add-dentry-materialisation-op.patch nfs-split-fs-nfs-inodec-into-inode-superblock-and-namespace-bits.patch nfs-share-nfs-superblocks-per-protocol-per-server-per-fsid.patch nfs-share-nfs-superblocks-per-protocol-per-server-per-fsid-fix.patch fs-cache-provide-a-filesystem-specific-syncable-page-bit.patch fs-cache-add-notification-of-page-becoming-writable-to-vma-ops.patch fs-cache-avoid-enfile-checking-for-kernel-specific-open-files.patch fs-cache-generic-filesystem-caching-facility.patch fs-cache-make-kafs-use-fs-cache.patch fs-cache-cachefiles-a-cache-that-backs-onto-a-mounted-filesystem.patch fs-cache-release-page-private-in-failed-readahead.patch nfs-use-local-caching.patch nfs-use-local-caching-fix.patch fix-incorrect-sa_onstack-behaviour-for-64-bit-processes.patch net-rxrpc-use-list_move.patch fs-use-list_move.patch mutex-subsystem-synchro-test-module.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html