linux/drivers/nvme/host
Anton Eidelman 504db087aa nvme-multipath: fix possible I/O hang when paths are updated
nvme_state_set_live() making a path available triggers requeue_work
in order to resubmit requests that ended up on requeue_list when no
paths were available.

This requeue_work may race with concurrent nvme_ns_head_make_request()
that do not observe the live path yet.
Such concurrent requests may by made by either:
- New IO submission.
- Requeue_work triggered by nvme_failover_req() or another ana_work.

A race may cause requeue_work capture the state of requeue_list before
more requests get onto the list. These requests will stay on the list
forever unless requeue_work is triggered again.

In order to prevent such race, nvme_state_set_live() should
synchronize_srcu(&head->srcu) before triggering the requeue_work and
prevent nvme_ns_head_make_request referencing an old snapshot of the
path list.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Anton Eidelman <anton@lightbitslabs.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2019-08-20 11:02:10 -06:00
..
core.c nvme: fix controller removal race with scan work 2019-07-31 18:01:56 -07:00
fabrics.c nvme: introduce nvme_is_fabrics to check fabrics cmd 2019-06-21 11:08:38 +02:00
fabrics.h nvme-fabrics: convert to SPDX identifiers 2019-02-20 07:22:13 -07:00
fault_inject.c nvme: enable to inject errors into admin commands 2019-06-21 11:15:50 +02:00
fc.c for-linus-20190715 2019-07-15 21:20:52 -07:00
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
lightnvm.c block: remove blk_init_request_from_bio 2019-06-20 10:29:22 -06:00
Makefile nvme-tcp: add NVMe over TCP host driver 2018-12-13 09:58:58 +01:00
multipath.c nvme-multipath: fix possible I/O hang when paths are updated 2019-08-20 11:02:10 -06:00
nvme.h nvme: fix controller removal race with scan work 2019-07-31 18:01:56 -07:00
pci.c for-linus-2019-08-17 2019-08-17 19:39:54 -07:00
rdma.c nvme-rdma: fix possible use-after-free in connect error flow 2019-07-31 18:00:07 -07:00
tcp.c nvme-tcp: don't use sendpage for SLAB pages 2019-07-09 14:18:09 -07:00
trace.c nvme-trace: add delete completion and submission queue to admin cmds tracer 2019-07-09 14:15:37 -07:00
trace.h nvme-trace: print result and status in hex format 2019-06-21 11:12:37 +02:00