qemu/hw/block
Klaus Jensen 98f84f5a4e hw/block/nvme: drain namespaces on sq deletion
For most commands, when issuing an AIO, the BlockAIOCB is stored in the
NvmeRequest aiocb pointer when the AIO is issued. The main use of this
is cancelling AIOs when deleting submission queues (it is currently not
used for Abort).

However, some commands like Dataset Management Zone Management Send
(zone reset) may involve more than one AIO and here the AIOs are issued
without saving a reference to the BlockAIOCB. This is a problem since
nvme_del_sq() will attempt to cancel outstanding AIOs, potentially with
an invalid BlockAIOCB since the aiocb pointer is not NULL'ed when the
request structure is recycled.

Fix this by

  1. making sure the aiocb pointer is NULL'ed when requests are recycled
  2. only attempt to cancel the AIO if the aiocb is non-NULL
  3. if any AIOs could not be cancelled, drain all aio as a last resort.

Fixes: dc04d25e2f ("hw/block/nvme: add support for the format nvm command")
Fixes: c94973288c ("hw/block/nvme: add broadcast nsid support flush command")
Fixes: e4e430b3d6 ("hw/block/nvme: add simple copy command")
Fixes: 5f5dc4c6a9 ("hw/block/nvme: zero out zones on reset")
Fixes: 2605257a26 ("hw/block/nvme: add the dataset management command")
Cc: Gollu Appalanaidu <anaidu.gollu@samsung.com>
Cc: Minwoo Im <minwoo.im@samsung.com>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
Reviewed-by: Minwoo Im <minwoo.im.dev@gmail.com>
2021-04-12 08:55:23 +02:00
..
dataplane block: Separate blk_is_writable() and blk_supports_write_perm() 2021-01-27 20:45:20 +01:00
block.c block: make BlockConf size props 32bit and accept size suffixes 2020-06-17 14:53:40 +02:00
cdrom.c Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
ecc.c Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
fdc.c hw/block/fdc: Fix 'fallback' property on sysbus floppy disk controllers 2021-04-09 18:00:29 +02:00
hd-geometry.c block: Remove blk_pread_unthrottled() 2019-08-16 10:25:16 +02:00
Kconfig hw/block: Introduce TC58128 eeprom Kconfig entry 2021-03-06 16:18:42 +01:00
m25p80.c hw/block: m25p80: Support fast read for SST flashes 2021-03-22 21:54:40 -04:00
meson.build hw/block/nvme: end-to-end data protection 2021-03-18 12:34:51 +01:00
nand.c block: Separate blk_is_writable() and blk_supports_write_perm() 2021-01-27 20:45:20 +01:00
nvme-dif.c hw/block/nvme: add missing copyright headers 2021-04-07 10:48:32 +02:00
nvme-dif.h hw/block/nvme: add missing copyright headers 2021-04-07 10:48:32 +02:00
nvme-ns.c hw/block/nvme: fix handling of private namespaces 2021-04-07 10:48:31 +02:00
nvme-ns.h hw/block/nvme: fix handling of private namespaces 2021-04-07 10:48:31 +02:00
nvme-subsys.c hw/block/nvme: fix handling of private namespaces 2021-04-07 10:48:31 +02:00
nvme-subsys.h hw/block/nvme: fix out-of-bounds read in nvme_subsys_ctrl 2021-04-07 10:48:33 +02:00
nvme.c hw/block/nvme: drain namespaces on sq deletion 2021-04-12 08:55:23 +02:00
nvme.h hw/block/nvme: fix handling of private namespaces 2021-04-07 10:48:31 +02:00
onenand.c block: Separate blk_is_writable() and blk_supports_write_perm() 2021-01-27 20:45:20 +01:00
pflash_cfi01.c hw/block/pflash_cfi: Replace DPRINTF with trace events 2021-03-18 11:16:31 +01:00
pflash_cfi02.c hw/block/pflash_cfi: Replace DPRINTF with trace events 2021-03-18 11:16:31 +01:00
swim.c block: Separate blk_is_writable() and blk_supports_write_perm() 2021-01-27 20:45:20 +01:00
tc58128.c hw/sh4: Add missing license 2021-03-06 16:18:42 +01:00
trace-events hw/block/nvme: fix handling of private namespaces 2021-04-07 10:48:31 +02:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
vhost-user-blk.c vhost-user-blk: add immediate cleanup on shutdown 2021-04-01 11:39:12 -04:00
virtio-blk.c virtio-blk: Respect discard granularity 2021-03-15 09:48:53 +00:00
xen_blkif.h xen: Import other xen/io/*.h 2019-06-24 10:42:30 +01:00
xen-block.c xen-block: Fix removal of backend instance via xenstore 2021-03-23 11:18:20 +00:00