mm: filemap: remove redundant code in do_read_cache_page
commit 32b635298ff4e991d8d8f64dc23782b02eec29c3 upstream. do_read_cache_page and __read_cache_page duplicate page filler code when filling the page for the first time. This patch simply removes the duplicate logic. Signed-off-by: Mel Gorman <mgorman@techsingularity.net> Reviewed-by: Jan Kara <jack@suse.cz> Cc: Hugh Dickins <hughd@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Mel Gorman <mgorman@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
106253c4c9
commit
9c9a6bbaf8
1 changed files with 12 additions and 31 deletions
41
mm/filemap.c
41
mm/filemap.c
|
@ -2215,7 +2215,7 @@ static struct page *wait_on_page_read(struct page *page)
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct page *__read_cache_page(struct address_space *mapping,
|
static struct page *do_read_cache_page(struct address_space *mapping,
|
||||||
pgoff_t index,
|
pgoff_t index,
|
||||||
int (*filler)(void *, struct page *),
|
int (*filler)(void *, struct page *),
|
||||||
void *data,
|
void *data,
|
||||||
|
@ -2237,31 +2237,19 @@ repeat:
|
||||||
/* Presumably ENOMEM for radix tree node */
|
/* Presumably ENOMEM for radix tree node */
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filler:
|
||||||
err = filler(data, page);
|
err = filler(data, page);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
page_cache_release(page);
|
page_cache_release(page);
|
||||||
page = ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
} else {
|
}
|
||||||
|
|
||||||
page = wait_on_page_read(page);
|
page = wait_on_page_read(page);
|
||||||
}
|
|
||||||
}
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct page *do_read_cache_page(struct address_space *mapping,
|
|
||||||
pgoff_t index,
|
|
||||||
int (*filler)(void *, struct page *),
|
|
||||||
void *data,
|
|
||||||
gfp_t gfp)
|
|
||||||
|
|
||||||
{
|
|
||||||
struct page *page;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
retry:
|
|
||||||
page = __read_cache_page(mapping, index, filler, data, gfp);
|
|
||||||
if (IS_ERR(page))
|
if (IS_ERR(page))
|
||||||
return page;
|
return page;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
if (PageUptodate(page))
|
if (PageUptodate(page))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
@ -2269,21 +2257,14 @@ retry:
|
||||||
if (!page->mapping) {
|
if (!page->mapping) {
|
||||||
unlock_page(page);
|
unlock_page(page);
|
||||||
page_cache_release(page);
|
page_cache_release(page);
|
||||||
goto retry;
|
goto repeat;
|
||||||
}
|
}
|
||||||
if (PageUptodate(page)) {
|
if (PageUptodate(page)) {
|
||||||
unlock_page(page);
|
unlock_page(page);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
err = filler(data, page);
|
goto filler;
|
||||||
if (err < 0) {
|
|
||||||
page_cache_release(page);
|
|
||||||
return ERR_PTR(err);
|
|
||||||
} else {
|
|
||||||
page = wait_on_page_read(page);
|
|
||||||
if (IS_ERR(page))
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
out:
|
out:
|
||||||
mark_page_accessed(page);
|
mark_page_accessed(page);
|
||||||
return page;
|
return page;
|
||||||
|
|
Loading…
Add table
Reference in a new issue