[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230328112716.50120-4-p.raghav@samsung.com>
Date: Tue, 28 Mar 2023 13:27:14 +0200
From: Pankaj Raghav <p.raghav@...sung.com>
To: martin@...ibond.com, axboe@...nel.dk, minchan@...nel.org,
akpm@...ux-foundation.org, hubcap@...ibond.com,
willy@...radead.org, viro@...iv.linux.org.uk,
senozhatsky@...omium.org, brauner@...nel.org
Cc: linux-kernel@...r.kernel.org, linux-fsdevel@...r.kernel.org,
mcgrof@...nel.org, linux-block@...r.kernel.org,
gost.dev@...sung.com, linux-mm@...ck.org, devel@...ts.orangefs.org,
Pankaj Raghav <p.raghav@...sung.com>,
Christoph Hellwig <hch@....de>
Subject: [PATCH 3/5] mpage: split bi_end_io callback for reads and writes
Split the bi_end_io handler for reads and writes similar to other aops.
This is a prep patch before we convert end_io handlers to use folios.
Suggested-by: Christoph Hellwig <hch@....de>
Signed-off-by: Pankaj Raghav <p.raghav@...sung.com>
---
fs/mpage.c | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/fs/mpage.c b/fs/mpage.c
index 22b9de5ddd68..3a545bf0f184 100644
--- a/fs/mpage.c
+++ b/fs/mpage.c
@@ -43,14 +43,28 @@
* status of that page is hard. See end_buffer_async_read() for the details.
* There is no point in duplicating all that complexity.
*/
-static void mpage_end_io(struct bio *bio)
+static void mpage_read_end_io(struct bio *bio)
{
struct bio_vec *bv;
struct bvec_iter_all iter_all;
bio_for_each_segment_all(bv, bio, iter_all) {
struct page *page = bv->bv_page;
- page_endio(page, bio_op(bio),
+ page_endio(page, REQ_OP_READ,
+ blk_status_to_errno(bio->bi_status));
+ }
+
+ bio_put(bio);
+}
+
+static void mpage_write_end_io(struct bio *bio)
+{
+ struct bio_vec *bv;
+ struct bvec_iter_all iter_all;
+
+ bio_for_each_segment_all(bv, bio, iter_all) {
+ struct page *page = bv->bv_page;
+ page_endio(page, REQ_OP_WRITE,
blk_status_to_errno(bio->bi_status));
}
@@ -59,7 +73,11 @@ static void mpage_end_io(struct bio *bio)
static struct bio *mpage_bio_submit(struct bio *bio)
{
- bio->bi_end_io = mpage_end_io;
+ if (op_is_write(bio_op(bio)))
+ bio->bi_end_io = mpage_write_end_io;
+ else
+ bio->bi_end_io = mpage_read_end_io;
+
guard_bio_eod(bio);
submit_bio(bio);
return NULL;
--
2.34.1
Powered by blists - more mailing lists