atomic queue limits updates v4
Christoph Hellwig
hch at lst.de
Sun Feb 11 22:45:54 PST 2024
Hi Jens,
currently queue limits updates are a mess in that they are updated one
limit at a time, which makes both cross-checking them against other
limits hard, and also makes it hard to provide atomicy.
This series tries to change this by updating the whole set of queue
limits atomically. This in done in two ways:
- for the initial setup the queue_limits structure is simply passed to
the queue/disk allocation helpers and applies there after validation.
- for the (relatively few) cases that update limits at runtime a pair
of helpers to take a snapshot of the current limits and to commit it
after picking up the callers changes are provided.
As the series is big enough it only converts two drivers - virtio_blk as
a heavily used driver in virtualized setups, and loop as one that actually
does runtime updates while being fairly simple. I plan to update most
drivers for this merge window, although SCSI will probably have to wait
for the next one given that it will need extensive API changes in the
LLDD and ULD interfaces.
Chances since v3:
- fix a max_user_discard_sectors bisection hazard
- fix the max_user_discard_sectors initialization for the new API.
This led to some major refactoring, so there is a new patch and
I've dropped the reviews for two existing ones that have major
modifications
Chances since v2:
- fix the physical block size default
- use PAGE_SECTORS_SHIFT more
Chances since v1:
- remove a spurious NULL return in blk_alloc_queue
- keep the existing max_discard_sectors == 0 behavior
- drop the patch nvme discard limit update hack - it will go into
the series updating nvme instead
- drop a chunk_sector check
- use PAGE_SECTORS in a few places
- document the checks and defaults in blk_validate_limits
- various spelling fixes
Diffstat:
arch/um/drivers/ubd_kern.c | 2
block/blk-core.c | 27 ++-
block/blk-mq.c | 27 +--
block/blk-settings.c | 276 +++++++++++++++++++++++++++------
block/blk-sysfs.c | 59 +++----
block/blk.h | 4
block/bsg-lib.c | 2
block/genhd.c | 5
drivers/block/amiflop.c | 2
drivers/block/aoe/aoeblk.c | 2
drivers/block/ataflop.c | 2
drivers/block/floppy.c | 2
drivers/block/loop.c | 75 ++++-----
drivers/block/mtip32xx/mtip32xx.c | 2
drivers/block/nbd.c | 2
drivers/block/null_blk/main.c | 2
drivers/block/ps3disk.c | 2
drivers/block/rbd.c | 2
drivers/block/rnbd/rnbd-clt.c | 2
drivers/block/sunvdc.c | 2
drivers/block/swim.c | 2
drivers/block/swim3.c | 2
drivers/block/ublk_drv.c | 2
drivers/block/virtio_blk.c | 299 ++++++++++++++++++------------------
drivers/block/xen-blkfront.c | 2
drivers/block/z2ram.c | 2
drivers/cdrom/gdrom.c | 2
drivers/memstick/core/ms_block.c | 2
drivers/memstick/core/mspro_block.c | 2
drivers/mmc/core/queue.c | 2
drivers/mtd/mtd_blkdevs.c | 2
drivers/mtd/ubi/block.c | 2
drivers/nvme/host/apple.c | 2
drivers/nvme/host/core.c | 8
drivers/s390/block/dasd_genhd.c | 2
drivers/s390/block/scm_blk.c | 2
drivers/scsi/scsi_scan.c | 2
drivers/ufs/core/ufshcd.c | 2
include/linux/blk-mq.h | 10 -
include/linux/blkdev.h | 36 +++-
40 files changed, 547 insertions(+), 337 deletions(-)
More information about the Linux-nvme
mailing list