linux/drivers
Damien Le Moal 81e7706345 dm: handle REQ_OP_ZONE_RESET_ALL
This commit implements processing of the REQ_OP_ZONE_RESET_ALL operation
for zoned mapped devices. Given that this operation always has a BIO
sector of 0 and a 0 size, processing through the regular BIO
__split_and_process_bio() function does not work because this function
would always select the first target. Instead, handling of this
operation is implemented using the function __send_zone_reset_all().

Similarly to the __send_empty_flush() function, the new
__send_zone_reset_all() function manually goes through all targets of a
mapped device table doing the following:
1) If the target can natively support REQ_OP_ZONE_RESET_ALL,
   __send_duplicate_bios() is used to forward the reset all operation to
   the target. This case is handled with the
   __send_zone_reset_all_native() function.
2) For other targets, the function __send_zone_reset_all_emulated() is
   executed to emulate the execution of REQ_OP_ZONE_RESET_ALL using
   regular REQ_OP_ZONE_RESET operations.

Targets that can natively support REQ_OP_ZONE_RESET_ALL are identified
using the new target field zone_reset_all_supported. This boolean is set
to true in for targets that have reliable zone limits, that is, targets
that map all sequential write required zones of their zoned device(s).
Setting this field is handled in dm_set_zones_restrictions() and
device_get_zone_resource_limits().

For targets with unreliable zone limits, REQ_OP_ZONE_RESET_ALL must be
emulated (case 2 above). This is implemented with
__send_zone_reset_all_emulated() and is similar to the block layer
function blkdev_zone_reset_all_emulated(): first a report zones is done
for the zones of the target to identify zones that need reset, that is,
any sequential write required zone that is not already empty. This is
done using a bitmap and the function dm_zone_get_reset_bitmap() which
sets to 1 the bit corresponding to a zone that needs reset. Next, this
zone bitmap is inspected and a clone BIO modified to use the
REQ_OP_ZONE_RESET operation issued for any zone with its bit set in the
zone bitmap.

This implementation is more efficient than what the block layer does
with blkdev_zone_reset_all_emulated(), which is always used for DM zoned
devices currently: as we can natively use REQ_OP_ZONE_RESET_ALL on
targets mapping all sequential write required zones, resetting all zones
of a zoned mapped device can be much faster compared to always emulating
this operation using regular per-zone reset. In the worst case, this
implementation is as-efficient as the block layer emulation. This
reduction in the time it takes to reset all zones of a zoned mapped
device depends directly on the mapped device targets mapping (reliable
zone limits or not).

Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20240704052816.623865-4-dlemoal@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2024-07-05 00:42:04 -06:00
..
accel The usual shower of singleton fixes and minor series all over MM, 2024-05-19 09:21:03 -07:00
accessibility Char/Misc bugfix for 6.10-rc1 2024-05-24 08:43:25 -07:00
acpi Merge branches 'acpi-ec', 'acpi-apei' and 'pnp' 2024-06-05 16:58:09 +02:00
amba
android binder: fix max_thread type inconsistency 2024-05-04 18:59:47 +02:00
ata block: move dma_pad_mask into queue_limits 2024-06-26 09:37:35 -06:00
atm atm/fore200e: Delete unused 'fore200e_boards' 2024-05-06 18:26:47 -07:00
auxdisplay - Fix-ups 2024-05-22 10:45:12 -07:00
base regmap-i2c: Subtract reg size from max_write 2024-05-27 01:30:33 +01:00
bcma
block null_blk: Introduce the zone_full parameter 2024-07-05 00:42:04 -06:00
bluetooth virtio: features, fixes, cleanups 2024-05-23 12:04:36 -07:00
bus tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
cache
cdrom cdrom: Add missing MODULE_DESCRIPTION() 2024-06-22 19:36:08 -06:00
cdx
char tpm: Switch to new Intel CPU model defines 2024-06-05 04:55:04 +03:00
clk clk: sifive: Do not register clkdevs for PRCI clocks 2024-05-29 12:31:02 -07:00
clocksource RISC-V Patches for the 6.10 Merge Window, Part 1 2024-05-22 09:56:00 -07:00
comedi
connector
counter
cpufreq cpufreq: intel_pstate: Fix unchecked HWP MSR access 2024-06-03 18:00:23 +02:00
cpuidle pmdomain core: 2024-05-16 08:50:32 -07:00
crypto virtio: features, fixes, cleanups 2024-05-23 12:04:36 -07:00
cxl cxl/region: Fix memregion leaks in devm_cxl_add_region() 2024-05-28 16:09:17 -07:00
dax The usual shower of singleton fixes and minor series all over MM, 2024-05-19 09:21:03 -07:00
dca
devfreq PM / devfreq: exynos: Use DEFINE_SIMPLE_DEV_PM_OPS for PM functions 2024-05-09 00:30:37 +09:00
dio
dma dmaengine updates for v6.10 2024-05-21 11:15:56 -07:00
dma-buf Merge remote-tracking branch 'drm/drm-fixes' into drm-misc-fixes 2024-05-28 22:21:34 +02:00
dpll dpll: fix return value check for kmemdup 2024-05-13 16:53:53 -07:00
edac EDAC/igen6: Convert PCIBIOS_* return codes to errnos 2024-06-04 11:29:52 +02:00
eisa alpha: remove DECpc AXP150 (Jensen) support 2024-05-03 22:09:50 +02:00
extcon extcon: adc-jack: Document missing struct members 2024-05-09 01:03:39 +09:00
firewire firewire: add missing MODULE_DESCRIPTION() to test modules 2024-05-27 07:34:58 +09:00
firmware EFI fixes for v6.10 #2 2024-06-06 09:39:36 -07:00
fpga Char/Misc and other driver subsystem changes for 6.10-rc1 2024-05-22 12:26:46 -07:00
fsi
gnss
gpio gpio: add missing MODULE_DESCRIPTION() macros 2024-06-07 10:05:21 +02:00
gpu Merge tag 'drm-misc-next-fixes-2024-06-07' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-fixes 2024-06-07 08:40:58 +10:00
greybus greybus: Fix use-after-free bug in gb_interface_release due to race condition. 2024-05-04 18:59:41 +02:00
hid for-linus-2024060801 2024-06-08 10:48:11 -07:00
hsi
hte
hv Char/Misc and other driver subsystem changes for 6.10-rc1 2024-05-22 12:26:46 -07:00
hwmon hwmon: (shtc1) Fix property misspelling 2024-05-30 09:05:19 -07:00
hwspinlock
hwtracing Char/Misc and other driver subsystem changes for 6.10-rc1 2024-05-22 12:26:46 -07:00
i2c i2c: synquacer: Remove a clk reference from struct synquacer_i2c 2024-05-23 13:38:15 +02:00
i3c i3c: dw: Add hot-join support. 2024-05-23 00:29:19 +02:00
idle
iio Char/Misc and other driver subsystem changes for 6.10-rc1 2024-05-22 12:26:46 -07:00
infiniband tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
input Input: silead - Always support 10 fingers 2024-06-03 11:10:08 +02:00
interconnect tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
iommu iommu/amd: Fix Invalid wait context issue 2024-06-04 14:00:59 +02:00
ipack
irqchip irqchip/gic-v3-its: Fix potential race condition in its_vlpi_prop_update() 2024-06-03 18:20:00 +02:00
isdn
leds
macintosh powerpc updates for 6.10 2024-05-17 09:05:46 -07:00
mailbox mailbox: zynqmp-ipi: drop irq_to_desc() call 2024-05-31 12:39:15 -05:00
mcb
md dm: handle REQ_OP_ZONE_RESET_ALL 2024-07-05 00:42:04 -06:00
media media: intel/ipu6: add csi2 port sanity check in notifier bound 2024-05-30 16:34:59 +02:00
memory ARM development updates for v6.10-rc1 2024-05-17 08:53:47 -07:00
memstick
message SCSI misc on 20240514 2024-05-14 18:25:53 -07:00
mfd pci-v6.10-changes 2024-05-21 10:09:28 -07:00
misc tracing: Remove second argument of __assign_str() 2024-05-23 12:28:01 -07:00
mmc block: move the stable_writes flag to queue_limits 2024-06-19 07:58:28 -06:00
most
mtd block: move the add_random flag to queue_limits 2024-06-19 07:58:28 -06:00
mux
net net: wwan: iosm: Fix tainted pointer delete is case of region creation fail 2024-06-06 10:15:14 +02:00
nfc nfc/nci: Add the inconsistency check between the input data length and count 2024-05-29 13:08:31 +01:00
ntb
nubus
nvdimm block: move the dax flag to queue_limits 2024-06-19 07:58:28 -06:00
nvme nvme: don't set io_opt if NOWS is zero 2024-07-01 06:52:42 -06:00
nvmem
of of: property: Fix fw_devlink handling of interrupt-map 2024-05-30 19:43:47 -05:00
opp OPP Updates for 6.10 2024-05-17 13:01:24 +02:00
parisc
parport
pci PCI: Revert the cfg_access_lock lockdep mechanism 2024-06-04 12:10:05 -05:00
pcmcia
peci
perf arm64 fixes for -rc1 2024-05-23 12:09:22 -07:00
phy phy-for-6.10 2024-05-21 11:19:18 -07:00
pinctrl - New Device Support 2024-05-22 10:41:14 -07:00
platform platform/x86/amd/hsmp: Check HSMP support on AMD family of processors 2024-06-03 11:57:28 +02:00
pmdomain pmdomain providers: 2024-05-27 08:18:31 -07:00
pnp PNP: Hide pnp_bus_type from the non-PNP code 2024-05-28 21:53:51 +02:00
power I2C core removes an argument from the i2c_mux_add_adapter() call to 2024-05-20 08:55:18 -07:00
powercap
pps
ps3
ptp ptp: Fix error message on failed pin verification 2024-06-05 16:01:16 -07:00
pwm pwm: pca9685: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-05-10 07:30:27 +02:00
rapidio rapidio: remove choice for enumeration 2024-05-14 23:36:19 +09:00
ras
regulator regulator: rtq2208: Fix invalid memory access when devm_of_regulator_put_matches is called 2024-05-28 13:22:54 +01:00
remoteproc remoteproc: k3-r5: Jump to error handling labels in start/stop errors 2024-05-06 13:34:12 -06:00
reset I'm actually surprised this time. There aren't any new Qualcomm SoC clk 2024-05-18 12:48:37 -07:00
rpmsg virtio: features, fixes, cleanups 2024-05-23 12:04:36 -07:00
rtc pcf8563: add wakeup-source support 2024-05-07 23:40:46 +02:00
s390 block: move the dax flag to queue_limits 2024-06-19 07:58:28 -06:00
sbus
scsi mpt3sas_scsih: don't set QUEUE_FLAG_NOMERGES 2024-06-28 10:37:34 -06:00
sh
siox
slimbus Linux 6.9-rc7 2024-05-08 19:21:51 +01:00
soc tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
soundwire soundwire updates for 6.10 2024-05-21 11:23:36 -07:00
spi spi: stm32: Don't warn about spurious interrupts 2024-05-29 19:12:09 +01:00
spmi spmi: pmic-arb: Add multi bus support 2024-05-08 19:46:11 +01:00
ssb
staging Staging driver changes for 6.10-rc1 2024-05-22 12:11:48 -07:00
target block: remove the blk_integrity_profile structure 2024-06-14 10:20:06 -06:00
tc
tee
thermal thermal: trip: Trigger trip down notifications when trips involved in mitigation become invalid 2024-05-27 13:00:00 +02:00
thunderbolt thunderbolt: Changes for v6.10 merge window 2024-05-10 10:25:22 +01:00
tty TTY/Serial fixes for 6.10-rc1 2024-05-24 08:38:28 -07:00
ufs block: move dma_pad_mask into queue_limits 2024-06-26 09:37:35 -06:00
uio
usb tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
vdpa Merge tag 'stable/vduse-virtio-net' into vhost 2024-05-22 08:32:48 -04:00
vfio VFIO updates for v6.10-rc1 2024-05-20 14:56:50 -07:00
vhost virtio: features, fixes, cleanups 2024-05-23 12:04:36 -07:00
video - Fix-ups 2024-05-22 10:45:12 -07:00
virt The usual shower of singleton fixes and minor series all over MM, 2024-05-19 09:21:03 -07:00
virtio virtio: features, fixes, cleanups 2024-05-23 12:04:36 -07:00
w1
watchdog watchdog: LENOVO_SE10_WDT should depend on X86 && DMI 2024-05-11 11:32:06 +02:00
xen xen: branch for v6.10-rc1 2024-05-24 10:24:49 -07:00
zorro
Kconfig
Makefile kbuild: use $(src) instead of $(srctree)/$(src) for source directory 2024-05-10 04:34:52 +09:00