]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.4.133/mm-filemap-remove-redundant-code-in-do_read_cache_page.patch
Fixes for 5.10
[thirdparty/kernel/stable-queue.git] / releases / 4.4.133 / mm-filemap-remove-redundant-code-in-do_read_cache_page.patch
CommitLineData
bdae2828
GKH
1From 32b635298ff4e991d8d8f64dc23782b02eec29c3 Mon Sep 17 00:00:00 2001
2From: Mel Gorman <mgorman@techsingularity.net>
3Date: Tue, 15 Mar 2016 14:55:36 -0700
4Subject: mm: filemap: remove redundant code in do_read_cache_page
5
6From: Mel Gorman <mgorman@techsingularity.net>
7
8commit 32b635298ff4e991d8d8f64dc23782b02eec29c3 upstream.
9
10do_read_cache_page and __read_cache_page duplicate page filler code when
11filling the page for the first time. This patch simply removes the
12duplicate logic.
13
14Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
15Reviewed-by: Jan Kara <jack@suse.cz>
16Cc: Hugh Dickins <hughd@google.com>
17Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
18Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
19Signed-off-by: Mel Gorman <mgorman@suse.de>
20Signed-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;