All of lore.kernel.org
 help / color / mirror / Atom feed
* switch block layer polling to a bio based model v2
@ 2021-04-27 16:16 Christoph Hellwig
  2021-04-27 16:16 ` [PATCH 01/15] direct-io: remove blk_poll support Christoph Hellwig
                   ` (14 more replies)
  0 siblings, 15 replies; 27+ messages in thread
From: Christoph Hellwig @ 2021-04-27 16:16 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Jeffle Xu, Ming Lei, Damien Le Moal, Keith Busch, Sagi Grimberg,
	Wunderlich, Mark, Vasudevan, Anil, linux-block, linux-fsdevel

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 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                    |  118 +++++++++++++++++-------
 block/blk-merge.c                   |    2 
 block/blk-mq-debugfs.c              |    2 
 block/blk-mq.c                      |  177 +++++++++++++++---------------------
 block/blk-mq.h                      |    6 -
 block/blk-sysfs.c                   |    3 
 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       |   10 +-
 drivers/s390/block/dcssblk.c        |    7 -
 drivers/s390/block/xpram.c          |    5 -
 fs/block_dev.c                      |   54 +++-------
 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              |   13 ++
 include/linux/bvec.h                |    2 
 include/linux/fs.h                  |    8 -
 include/linux/iomap.h               |    3 
 mm/page_io.c                        |   10 --
 47 files changed, 332 insertions(+), 393 deletions(-)

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2021-05-06 21:23 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-27 16:16 switch block layer polling to a bio based model v2 Christoph Hellwig
2021-04-27 16:16 ` [PATCH 01/15] direct-io: remove blk_poll support Christoph Hellwig
2021-04-27 16:16 ` [PATCH 02/15] block: don't try to poll multi-bio I/Os in __blkdev_direct_IO Christoph Hellwig
2021-04-27 16:16 ` [PATCH 03/15] iomap: don't try to poll multi-bio I/Os in __iomap_dio_rw Christoph Hellwig
2021-04-27 16:16 ` [PATCH 04/15] blk-mq: factor out a blk_qc_to_hctx helper Christoph Hellwig
2021-04-27 16:16 ` [PATCH 05/15] blk-mq: factor out a "classic" poll helper Christoph Hellwig
2021-04-27 16:16 ` [PATCH 06/15] blk-mq: remove blk_qc_t_to_tag and blk_qc_t_is_internal Christoph Hellwig
2021-04-27 16:16 ` [PATCH 07/15] blk-mq: remove blk_qc_t_valid Christoph Hellwig
2021-04-27 16:16 ` [PATCH 08/15] io_uring: don't sleep when polling for I/O Christoph Hellwig
2021-04-27 16:16 ` [PATCH 09/15] block: rename REQ_HIPRI to REQ_POLLED Christoph Hellwig
2021-04-27 16:16 ` [PATCH 10/15] block: use SLAB_TYPESAFE_BY_RCU for the bio slab Christoph Hellwig
2021-04-27 16:16 ` [PATCH 11/15] block: define 'struct bvec_iter' as packed Christoph Hellwig
2021-04-27 16:16 ` [PATCH 12/15] block: switch polling to be bio based Christoph Hellwig
2021-04-28  2:28   ` Ming Lei
2021-04-29  7:20     ` Christoph Hellwig
2021-04-29  7:36       ` Ming Lei
2021-04-29  9:50         ` Christoph Hellwig
2021-04-29 14:42           ` Ming Lei
2021-04-27 16:16 ` [PATCH 13/15] block: add a QUEUE_FLAG_POLL_CAPABLE flag Christoph Hellwig
2021-04-27 16:16 ` [PATCH 14/15] nvme-multipath: set QUEUE_FLAG_NOWAIT Christoph Hellwig
2021-04-28  2:32   ` Ming Lei
2021-04-29  7:27     ` Christoph Hellwig
2021-04-29  7:37       ` Ming Lei
2021-04-29  9:46         ` Christoph Hellwig
2021-05-06 21:23           ` Sagi Grimberg
2021-04-27 16:16 ` [PATCH 15/15] nvme-multipath: enable polled I/O Christoph Hellwig
2021-04-28  2:36   ` Ming Lei

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.