From: Andrew Morton - Two callsites: uninline it. - Paranoia check for already-locked page - Remember to unlock the page again. Cc: David Howells Cc: Trond Myklebust Signed-off-by: Andrew Morton --- mm/readahead.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff -puN mm/readahead.c~fs-cache-release-page-private-in-failed-readahead-uninlining mm/readahead.c --- devel/mm/readahead.c~fs-cache-release-page-private-in-failed-readahead-uninlining 2006-05-12 11:40:07.000000000 -0700 +++ devel-akpm/mm/readahead.c 2006-05-12 11:40:07.000000000 -0700 @@ -122,16 +122,17 @@ static inline unsigned long get_next_ra_ /* * see if a page needs releasing upon read_cache_pages() failure */ -static inline void read_cache_pages_release_page(struct address_space *mapping, +static void read_cache_pages_release_page(struct address_space *mapping, struct page *page) { if (PagePrivate(page)) { page->mapping = mapping; - SetPageLocked(page); + if (TestSetPageLocked(page)) + BUG(); try_to_release_page(page, GFP_KERNEL); page->mapping = NULL; + unlock_page(page); } - page_cache_release(page); } _