In case of a DSM Deallocate (unmap) with multiple ranges, individual bdev IOs are submitted for each range. If the bdev IO cannot be allocated, the request is queued on io_wait_queue; however previously submitted ranges may complete before memory is available for the next range. In such a case, the completion callback will free unmap_ctx, while the request is still queued for memory - causing a segfault when the request is dequeued. To fix, introduce a new field tracking the unmap ranges, and make sure the count is nonzero when the request is queued for memory. Signed-off-by: Yair Elharrar <yair@excelero.com> Change-Id: Ifcac018f14af5ca408c7793ca9543c1e2d63b777 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/447542 Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> |
||
---|---|---|
.. | ||
ctrlr_bdev.c | ||
ctrlr_discovery.c | ||
ctrlr.c | ||
Makefile | ||
nvmf_fc.h | ||
nvmf_internal.h | ||
nvmf.c | ||
rdma.c | ||
subsystem.c | ||
tcp.c | ||
transport.c | ||
transport.h |