mpage: stop using bdev_{read,write}_page
authorChristoph Hellwig <hch@lst.de>
Wed, 25 Jan 2023 13:34:30 +0000 (14:34 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 3 Feb 2023 06:33:32 +0000 (22:33 -0800)
Patch series "remove ->rw_page".

This series removes the ->rw_page block_device_operation, which is an old
and clumsy attempt at a simple read/write fast path for the block layer.
It isn't actually used by the fastest block layer operations that we
support (polled I/O through io_uring), but only used by the mpage buffered
I/O helpers which are some of the slowest I/O we have and do not make any
difference there at all, and zram which is a block device abused to
duplicate the zram functionality.

Given that zram is heavily used we need to make sure there is a good
replacement for synchronous I/O, so this series adds a new flag for
drivers that complete I/O synchronously and uses that flag to use on-stack
bios and synchronous submission for them in the swap code.

This patch (of 7):

These are micro-optimizations for synchronous I/O, which do not matter
compared to all the other inefficiencies in the legacy buffer_head based
mpage code.

Link: https://lkml.kernel.org/r/20230125133436.447864-1-hch@lst.de
Link: https://lkml.kernel.org/r/20230125133436.447864-2-hch@lst.de
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Cc: Keith Busch <kbusch@kernel.org>
Cc: Dave Jiang <dave.jiang@intel.com>
Cc: Ira Weiny <ira.weiny@intel.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: Vishal Verma <vishal.l.verma@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/mpage.c

index b8e7975..55988ea 100644 (file)
@@ -269,11 +269,6 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
 
 alloc_new:
        if (args->bio == NULL) {
-               if (first_hole == blocks_per_page) {
-                       if (!bdev_read_page(bdev, blocks[0] << (blkbits - 9),
-                                                               &folio->page))
-                               goto out;
-               }
                args->bio = bio_alloc(bdev, bio_max_segs(args->nr_pages), opf,
                                      gfp);
                if (args->bio == NULL)
@@ -585,11 +580,6 @@ page_is_mapped:
 
 alloc_new:
        if (bio == NULL) {
-               if (first_unmapped == blocks_per_page) {
-                       if (!bdev_write_page(bdev, blocks[0] << (blkbits - 9),
-                                                               page, wbc))
-                               goto out;
-               }
                bio = bio_alloc(bdev, BIO_MAX_VECS,
                                REQ_OP_WRITE | wbc_to_write_flags(wbc),
                                GFP_NOFS);