From: Christoph Hellwig <hch@lst.de> To: Jens Axboe <axboe@kernel.dk> Cc: Jeffle Xu <jefflexu@linux.alibaba.com>, Ming Lei <ming.lei@redhat.com>, Damien Le Moal <Damien.LeMoal@wdc.com>, Keith Busch <kbusch@kernel.org>, Sagi Grimberg <sagi@grimberg.me>, "Wunderlich, Mark" <mark.wunderlich@intel.com>, "Vasudevan, Anil" <anil.vasudevan@intel.com>, linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-nvme@lists.infradead.org Subject: switch block layer polling to a bio based model v4 Date: Tue, 12 Oct 2021 13:12:10 +0200 [thread overview] Message-ID: <20211012111226.760968-1-hch@lst.de> (raw) Hi all, This series clean up the block polling code a bit and changes the interface to poll for a specific bio instead of a request_queue and cookie pair. Polling for the bio itself leads to a few advantages: - the cookie construction can made entirely private in blk-mq.c - the caller does not need to remember the request_queue and cookie separately and thus sidesteps their lifetime issues - keeping the device and the cookie inside the bio allows to trivially support polling BIOs remapping by stacking drivers - a lot of code to propagate the cookie back up the submission path can removed entirely The one major caveat is that this requires RCU freeing polled BIOs to make sure the bio that contains the polling information is still alive when io_uring tries to poll it through the iocb. For synchronous polling all the callers have a bio reference anyway, so this is not an issue. Git tree: git://git.infradead.org/users/hch/block.git bio-poll Gitweb: http://git.infradead.org/users/hch/block.git/shortlog/refs/heads/bio-poll Chances since v3: - rebased to the latests for-5.16/block tree + "two small blk-mq cleanups" - fix the refcount logic in __blkdev_direct_IO - split up a patch to make it easier to review - grab a queue reference in bio_poll - better document the RCU assumptions in bio_poll Chances since v2: - remove support for writing to the poll attribute - better document the block_device life time assumptions in bio_poll - only set QUEUE_FLAG_POLL on nvme-multipath queues where it makes sense Chances since v1: - use SLAB_TYPESAFE_BY_RCU to only free the pages backing the bio slabs bio RCU - split the spin argument to bio_poll to avoid sleeping under RCU from io_uring - add support for polling nvme multipath devices Diffstat: arch/m68k/emu/nfblock.c | 3 arch/xtensa/platforms/iss/simdisk.c | 3 block/bio.c | 4 block/blk-core.c | 129 ++++++++++++++++++++------ block/blk-merge.c | 2 block/blk-mq-debugfs.c | 2 block/blk-mq.c | 173 ++++++++++++++---------------------- block/blk-mq.h | 6 - block/blk-sysfs.c | 23 ---- drivers/block/brd.c | 12 +- drivers/block/drbd/drbd_int.h | 2 drivers/block/drbd/drbd_req.c | 3 drivers/block/n64cart.c | 12 +- drivers/block/null_blk/main.c | 3 drivers/block/pktcdvd.c | 7 - drivers/block/ps3vram.c | 6 - drivers/block/rsxx/dev.c | 7 - drivers/block/zram/zram_drv.c | 10 -- drivers/lightnvm/pblk-init.c | 6 - drivers/md/bcache/request.c | 13 +- drivers/md/bcache/request.h | 4 drivers/md/dm.c | 28 ++--- drivers/md/md.c | 10 -- drivers/nvdimm/blk.c | 5 - drivers/nvdimm/btt.c | 5 - drivers/nvdimm/pmem.c | 3 drivers/nvme/host/core.c | 4 drivers/nvme/host/multipath.c | 17 ++- drivers/s390/block/dcssblk.c | 7 - drivers/s390/block/xpram.c | 5 - drivers/scsi/scsi_debug.c | 10 +- fs/block_dev.c | 44 ++------- fs/btrfs/inode.c | 8 - fs/direct-io.c | 14 -- fs/ext4/file.c | 2 fs/gfs2/file.c | 4 fs/io_uring.c | 14 +- fs/iomap/direct-io.c | 56 ++++++----- fs/xfs/xfs_file.c | 2 fs/zonefs/super.c | 2 include/linux/bio.h | 4 include/linux/blk-mq.h | 15 --- include/linux/blk_types.h | 34 +------ include/linux/blkdev.h | 12 +- include/linux/bvec.h | 2 include/linux/fs.h | 8 - include/linux/iomap.h | 3 mm/page_io.c | 10 -- 48 files changed, 350 insertions(+), 408 deletions(-)
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de> To: Jens Axboe <axboe@kernel.dk> Cc: Jeffle Xu <jefflexu@linux.alibaba.com>, Ming Lei <ming.lei@redhat.com>, Damien Le Moal <Damien.LeMoal@wdc.com>, Keith Busch <kbusch@kernel.org>, Sagi Grimberg <sagi@grimberg.me>, "Wunderlich, Mark" <mark.wunderlich@intel.com>, "Vasudevan, Anil" <anil.vasudevan@intel.com>, linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-nvme@lists.infradead.org Subject: switch block layer polling to a bio based model v4 Date: Tue, 12 Oct 2021 13:12:10 +0200 [thread overview] Message-ID: <20211012111226.760968-1-hch@lst.de> (raw) Hi all, This series clean up the block polling code a bit and changes the interface to poll for a specific bio instead of a request_queue and cookie pair. Polling for the bio itself leads to a few advantages: - the cookie construction can made entirely private in blk-mq.c - the caller does not need to remember the request_queue and cookie separately and thus sidesteps their lifetime issues - keeping the device and the cookie inside the bio allows to trivially support polling BIOs remapping by stacking drivers - a lot of code to propagate the cookie back up the submission path can removed entirely The one major caveat is that this requires RCU freeing polled BIOs to make sure the bio that contains the polling information is still alive when io_uring tries to poll it through the iocb. For synchronous polling all the callers have a bio reference anyway, so this is not an issue. Git tree: git://git.infradead.org/users/hch/block.git bio-poll Gitweb: http://git.infradead.org/users/hch/block.git/shortlog/refs/heads/bio-poll Chances since v3: - rebased to the latests for-5.16/block tree + "two small blk-mq cleanups" - fix the refcount logic in __blkdev_direct_IO - split up a patch to make it easier to review - grab a queue reference in bio_poll - better document the RCU assumptions in bio_poll Chances since v2: - remove support for writing to the poll attribute - better document the block_device life time assumptions in bio_poll - only set QUEUE_FLAG_POLL on nvme-multipath queues where it makes sense Chances since v1: - use SLAB_TYPESAFE_BY_RCU to only free the pages backing the bio slabs bio RCU - split the spin argument to bio_poll to avoid sleeping under RCU from io_uring - add support for polling nvme multipath devices Diffstat: arch/m68k/emu/nfblock.c | 3 arch/xtensa/platforms/iss/simdisk.c | 3 block/bio.c | 4 block/blk-core.c | 129 ++++++++++++++++++++------ block/blk-merge.c | 2 block/blk-mq-debugfs.c | 2 block/blk-mq.c | 173 ++++++++++++++---------------------- block/blk-mq.h | 6 - block/blk-sysfs.c | 23 ---- drivers/block/brd.c | 12 +- drivers/block/drbd/drbd_int.h | 2 drivers/block/drbd/drbd_req.c | 3 drivers/block/n64cart.c | 12 +- drivers/block/null_blk/main.c | 3 drivers/block/pktcdvd.c | 7 - drivers/block/ps3vram.c | 6 - drivers/block/rsxx/dev.c | 7 - drivers/block/zram/zram_drv.c | 10 -- drivers/lightnvm/pblk-init.c | 6 - drivers/md/bcache/request.c | 13 +- drivers/md/bcache/request.h | 4 drivers/md/dm.c | 28 ++--- drivers/md/md.c | 10 -- drivers/nvdimm/blk.c | 5 - drivers/nvdimm/btt.c | 5 - drivers/nvdimm/pmem.c | 3 drivers/nvme/host/core.c | 4 drivers/nvme/host/multipath.c | 17 ++- drivers/s390/block/dcssblk.c | 7 - drivers/s390/block/xpram.c | 5 - drivers/scsi/scsi_debug.c | 10 +- fs/block_dev.c | 44 ++------- fs/btrfs/inode.c | 8 - fs/direct-io.c | 14 -- fs/ext4/file.c | 2 fs/gfs2/file.c | 4 fs/io_uring.c | 14 +- fs/iomap/direct-io.c | 56 ++++++----- fs/xfs/xfs_file.c | 2 fs/zonefs/super.c | 2 include/linux/bio.h | 4 include/linux/blk-mq.h | 15 --- include/linux/blk_types.h | 34 +------ include/linux/blkdev.h | 12 +- include/linux/bvec.h | 2 include/linux/fs.h | 8 - include/linux/iomap.h | 3 mm/page_io.c | 10 -- 48 files changed, 350 insertions(+), 408 deletions(-) _______________________________________________ Linux-nvme mailing list Linux-nvme@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-nvme
next reply other threads:[~2021-10-12 11:14 UTC|newest] Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-10-12 11:12 Christoph Hellwig [this message] 2021-10-12 11:12 ` switch block layer polling to a bio based model v4 Christoph Hellwig 2021-10-12 11:12 ` [PATCH 01/16] direct-io: remove blk_poll support Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-13 10:42 ` Sagi Grimberg 2021-10-13 10:42 ` Sagi Grimberg 2021-10-28 1:26 ` Chaitanya Kulkarni 2021-10-12 11:12 ` [PATCH 02/16] block: don't try to poll multi-bio I/Os in __blkdev_direct_IO Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-12 11:12 ` [PATCH 03/16] iomap: don't try to poll multi-bio I/Os in __iomap_dio_rw Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-12 11:12 ` [PATCH 04/16] io_uring: fix a layering violation in io_iopoll_req_issued Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-12 11:12 ` [PATCH 05/16] blk-mq: factor out a blk_qc_to_hctx helper Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-12 11:12 ` [PATCH 06/16] blk-mq: factor out a "classic" poll helper Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-12 11:12 ` [PATCH 07/16] blk-mq: remove blk_qc_t_to_tag and blk_qc_t_is_internal Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-12 11:12 ` [PATCH 08/16] blk-mq: remove blk_qc_t_valid Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-12 11:12 ` [PATCH 09/16] block: replace the spin argument to blk_iopoll with a flags argument Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-13 10:44 ` Sagi Grimberg 2021-10-13 10:44 ` Sagi Grimberg 2021-10-12 11:12 ` [PATCH 10/16] io_uring: don't sleep when polling for I/O Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-13 10:45 ` Sagi Grimberg 2021-10-13 10:45 ` Sagi Grimberg 2021-10-12 11:12 ` [PATCH 11/16] block: rename REQ_HIPRI to REQ_POLLED Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-13 10:45 ` Sagi Grimberg 2021-10-13 10:45 ` Sagi Grimberg 2021-10-12 11:12 ` [PATCH 12/16] block: use SLAB_TYPESAFE_BY_RCU for the bio slab Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-12 11:12 ` [PATCH 13/16] block: define 'struct bvec_iter' as packed Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-12 11:12 ` [PATCH 14/16] block: switch polling to be bio based Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-13 9:59 ` Ming Lei 2021-10-13 9:59 ` Ming Lei 2021-10-13 10:45 ` Sagi Grimberg 2021-10-13 10:45 ` Sagi Grimberg 2021-10-15 8:30 ` Pankaj Raghav 2021-10-15 13:24 ` Christoph Hellwig 2021-11-03 7:11 ` chenxiang (M) 2021-11-03 7:22 ` Christoph Hellwig 2021-11-03 8:05 ` chenxiang (M) 2021-10-12 11:12 ` [PATCH 15/16] block: don't allow writing to the poll queue attribute Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-12 11:12 ` [PATCH 16/16] nvme-multipath: enable polled I/O Christoph Hellwig 2021-10-12 11:12 ` Christoph Hellwig 2021-10-13 10:46 ` Sagi Grimberg 2021-10-13 10:46 ` Sagi Grimberg 2021-10-12 14:47 ` switch block layer polling to a bio based model v4 Jens Axboe 2021-10-12 14:47 ` Jens Axboe 2021-10-12 14:57 ` Sagi Grimberg 2021-10-12 14:57 ` Sagi Grimberg 2021-10-12 14:58 ` Jens Axboe 2021-10-12 14:58 ` Jens Axboe 2021-10-12 15:09 ` Sagi Grimberg 2021-10-12 15:09 ` Sagi Grimberg 2021-10-12 15:06 ` Christoph Hellwig 2021-10-12 15:06 ` Christoph Hellwig -- strict thread matches above, loose matches on Subject: below -- 2021-06-15 13:10 Christoph Hellwig 2021-06-15 13:10 ` Christoph Hellwig 2021-06-15 14:37 ` Keith Busch 2021-06-15 14:37 ` Keith Busch 2021-06-15 16:06 ` Christoph Hellwig 2021-06-15 16:06 ` Christoph Hellwig
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=20211012111226.760968-1-hch@lst.de \ --to=hch@lst.de \ --cc=Damien.LeMoal@wdc.com \ --cc=anil.vasudevan@intel.com \ --cc=axboe@kernel.dk \ --cc=jefflexu@linux.alibaba.com \ --cc=kbusch@kernel.org \ --cc=linux-block@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=mark.wunderlich@intel.com \ --cc=ming.lei@redhat.com \ --cc=sagi@grimberg.me \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.