From: Matthew Wilcox <matthew.r.wilcox@intel.com>
To: linux-fsdevel@vger.kernel.org, linux-mm@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: Matthew Wilcox <matthew.r.wilcox@intel.com>
Subject: [PATCH 2/6] Factor page_endio() out of mpage_end_io()
Date: Thu, 9 Jan 2014 21:39:47 -0500 [thread overview]
Message-ID: <1389321591-25455-2-git-send-email-matthew.r.wilcox@intel.com> (raw)
In-Reply-To: <1389321591-25455-1-git-send-email-matthew.r.wilcox@intel.com>
In-Reply-To: <cover.1387748522.git.matthew.r.wilcox@intel.com>
page_endio() takes care of updating all the appropriate page flags once I/O
has finished to a page.
Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
---
fs/mpage.c | 17 +----------------
include/linux/pagemap.h | 2 ++
mm/filemap.c | 25 +++++++++++++++++++++++++
3 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/fs/mpage.c b/fs/mpage.c
index b8552ae..9c21dc0 100644
--- a/fs/mpage.c
+++ b/fs/mpage.c
@@ -51,22 +51,7 @@ static void mpage_end_io(struct bio *bio, int err)
if (--bvec >= bio->bi_io_vec)
prefetchw(&bvec->bv_page->flags);
- if (bio_data_dir(bio) == READ) {
- if (uptodate) {
- SetPageUptodate(page);
- } else {
- ClearPageUptodate(page);
- SetPageError(page);
- }
- unlock_page(page);
- } else { /* bio_data_dir(bio) == WRITE */
- if (!uptodate) {
- SetPageError(page);
- if (page->mapping)
- set_bit(AS_EIO, &page->mapping->flags);
- }
- end_page_writeback(page);
- }
+ page_endio(page, bio_data_dir(bio), uptodate);
} while (bvec >= bio->bi_io_vec);
bio_put(bio);
}
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index e3dea75..2271f19 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -416,6 +416,8 @@ static inline void wait_on_page_writeback(struct page *page)
extern void end_page_writeback(struct page *page);
void wait_for_stable_page(struct page *page);
+void page_endio(struct page *page, int rw, int success);
+
/*
* Add an arbitrary waiter to a page's wait queue
*/
diff --git a/mm/filemap.c b/mm/filemap.c
index b7749a9..763753d 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -631,6 +631,31 @@ void end_page_writeback(struct page *page)
}
EXPORT_SYMBOL(end_page_writeback);
+/*
+ * After completing I/O on a page, call this routine to update the page
+ * flags appropriately
+ */
+void page_endio(struct page *page, int rw, int success)
+{
+ if (rw == READ) {
+ if (success) {
+ SetPageUptodate(page);
+ } else {
+ ClearPageUptodate(page);
+ SetPageError(page);
+ }
+ unlock_page(page);
+ } else { /* rw == WRITE */
+ if (!success) {
+ SetPageError(page);
+ if (page->mapping)
+ set_bit(AS_EIO, &page->mapping->flags);
+ }
+ end_page_writeback(page);
+ }
+}
+EXPORT_SYMBOL_GPL(page_endio);
+
/**
* __lock_page - get a lock on the page, assuming we need to sleep to get it
* @page: the page to lock
--
1.8.5.2
next prev parent reply other threads:[~2014-01-10 2:39 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-10 2:39 [PATCH 0/6] Page I/O Matthew Wilcox
2014-01-10 2:39 ` [PATCH 1/6] Add bdev_read_page() and bdev_write_page() Matthew Wilcox
2014-01-10 2:39 ` Matthew Wilcox [this message]
2014-01-10 2:39 ` [PATCH 3/6] swap: Use bdev_read_page() / bdev_write_page() Matthew Wilcox
2014-01-10 2:39 ` [PATCH 4/6] brd: Add support for rw_page Matthew Wilcox
2014-01-10 2:39 ` [PATCH 5/6] virtio_blk: Add rw_page implementation Matthew Wilcox
2014-01-10 2:39 ` [PATCH 6/6] NVMe: Add support for rw_page Matthew Wilcox
2014-01-10 15:24 ` [PATCH 0/6] Page I/O Jeff Moyer
2014-01-10 16:17 ` Matthew Wilcox
2014-01-15 0:04 ` Dave Chinner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1389321591-25455-2-git-send-email-matthew.r.wilcox@intel.com \
--to=matthew.r.wilcox@intel.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).