Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32b63529 authored by Mel Gorman's avatar Mel Gorman Committed by Linus Torvalds
Browse files

mm: filemap: remove redundant code in do_read_cache_page



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: default avatarMel Gorman <mgorman@techsingularity.net>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 07061aab
Loading
Loading
Loading
Loading
+12 −31
Original line number Diff line number Diff line
@@ -2303,7 +2303,7 @@ static struct page *wait_on_page_read(struct page *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,
				int (*filler)(void *, struct page *),
				void *data,
@@ -2325,31 +2325,19 @@ static struct page *__read_cache_page(struct address_space *mapping,
			/* Presumably ENOMEM for radix tree node */
			return ERR_PTR(err);
		}

filler:
		err = filler(data, page);
		if (err < 0) {
			page_cache_release(page);
			page = ERR_PTR(err);
		} else {
			page = wait_on_page_read(page);
		}
	}
	return page;
			return ERR_PTR(err);
		}

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);
		page = wait_on_page_read(page);
		if (IS_ERR(page))
			return page;
		goto out;
	}
	if (PageUptodate(page))
		goto out;

@@ -2357,21 +2345,14 @@ static struct page *do_read_cache_page(struct address_space *mapping,
	if (!page->mapping) {
		unlock_page(page);
		page_cache_release(page);
		goto retry;
		goto repeat;
	}
	if (PageUptodate(page)) {
		unlock_page(page);
		goto out;
	}
	err = filler(data, page);
	if (err < 0) {
		page_cache_release(page);
		return ERR_PTR(err);
	} else {
		page = wait_on_page_read(page);
		if (IS_ERR(page))
			return page;
	}
	goto filler;

out:
	mark_page_accessed(page);
	return page;