]>
Commit | Line | Data |
---|---|---|
bdae2828 GKH |
1 | From 32b635298ff4e991d8d8f64dc23782b02eec29c3 Mon Sep 17 00:00:00 2001 |
2 | From: Mel Gorman <mgorman@techsingularity.net> | |
3 | Date: Tue, 15 Mar 2016 14:55:36 -0700 | |
4 | Subject: mm: filemap: remove redundant code in do_read_cache_page | |
5 | ||
6 | From: Mel Gorman <mgorman@techsingularity.net> | |
7 | ||
8 | commit 32b635298ff4e991d8d8f64dc23782b02eec29c3 upstream. | |
9 | ||
10 | do_read_cache_page and __read_cache_page duplicate page filler code when | |
11 | filling the page for the first time. This patch simply removes the | |
12 | duplicate logic. | |
13 | ||
14 | Signed-off-by: Mel Gorman <mgorman@techsingularity.net> | |
15 | Reviewed-by: Jan Kara <jack@suse.cz> | |
16 | Cc: Hugh Dickins <hughd@google.com> | |
17 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | |
18 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | |
19 | Signed-off-by: Mel Gorman <mgorman@suse.de> | |
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
21 | ||
22 | --- | |
23 | mm/filemap.c | 43 ++++++++++++------------------------------- | |
24 | 1 file changed, 12 insertions(+), 31 deletions(-) | |
25 | ||
26 | --- a/mm/filemap.c | |
27 | +++ b/mm/filemap.c | |
28 | @@ -2215,7 +2215,7 @@ static struct page *wait_on_page_read(st | |
29 | return page; | |
30 | } | |
31 | ||
32 | -static struct page *__read_cache_page(struct address_space *mapping, | |
33 | +static struct page *do_read_cache_page(struct address_space *mapping, | |
34 | pgoff_t index, | |
35 | int (*filler)(void *, struct page *), | |
36 | void *data, | |
37 | @@ -2237,31 +2237,19 @@ repeat: | |
38 | /* Presumably ENOMEM for radix tree node */ | |
39 | return ERR_PTR(err); | |
40 | } | |
41 | + | |
42 | +filler: | |
43 | err = filler(data, page); | |
44 | if (err < 0) { | |
45 | page_cache_release(page); | |
46 | - page = ERR_PTR(err); | |
47 | - } else { | |
48 | - page = wait_on_page_read(page); | |
49 | + return ERR_PTR(err); | |
50 | } | |
51 | - } | |
52 | - return page; | |
53 | -} | |
54 | - | |
55 | -static struct page *do_read_cache_page(struct address_space *mapping, | |
56 | - pgoff_t index, | |
57 | - int (*filler)(void *, struct page *), | |
58 | - void *data, | |
59 | - gfp_t gfp) | |
60 | ||
61 | -{ | |
62 | - struct page *page; | |
63 | - int err; | |
64 | - | |
65 | -retry: | |
66 | - page = __read_cache_page(mapping, index, filler, data, gfp); | |
67 | - if (IS_ERR(page)) | |
68 | - return page; | |
69 | + page = wait_on_page_read(page); | |
70 | + if (IS_ERR(page)) | |
71 | + return page; | |
72 | + goto out; | |
73 | + } | |
74 | if (PageUptodate(page)) | |
75 | goto out; | |
76 | ||
77 | @@ -2269,21 +2257,14 @@ retry: | |
78 | if (!page->mapping) { | |
79 | unlock_page(page); | |
80 | page_cache_release(page); | |
81 | - goto retry; | |
82 | + goto repeat; | |
83 | } | |
84 | if (PageUptodate(page)) { | |
85 | unlock_page(page); | |
86 | goto out; | |
87 | } | |
88 | - err = filler(data, page); | |
89 | - if (err < 0) { | |
90 | - page_cache_release(page); | |
91 | - return ERR_PTR(err); | |
92 | - } else { | |
93 | - page = wait_on_page_read(page); | |
94 | - if (IS_ERR(page)) | |
95 | - return page; | |
96 | - } | |
97 | + goto filler; | |
98 | + | |
99 | out: | |
100 | mark_page_accessed(page); | |
101 | return page; |