Spdk/test
Shuhei Matsumoto b5f360c425 rdma: Maintain per device PD which is persistent across reconnect
SPDK NVMe RDMA initiator used the default PD per RDMA device. Default PD
may be changed when all QPs for the RDMA device are destroyed and created
again.

For multipath, the RDMA zero copy feature require the PD per RDMA device
to be persistent when all QPs for the RDMA device are destroyed and
created again.

Maintain such persistent PDs in this patch.

Add two APIs, spdk_rdma_get_pd() and spdk_rdma_put_pd().

In each call of two APIs, synchronize RDMA device list with
rdma_get_devices().

Context may be deleted anytime by rdma-core. To avoid such deletion,
hold the returned array by rdma_get_devices().

RDMA device has PD, context, ref. count, and removed flag. If context
is missing in rdma_get_devices(), set the removed flag to true. Then,
if the ref count becomes zero, free the PD and the RDMA device.

The ref. count of a RDMA device is incremented when spdk_rdma_get_pd()
is called and decremented when spdk_rdma_put_pd() is called.

To simplify synchronization, sort the returned array by
rdma_get_devices().

To avoid resource leakage, add destructor function and free all PDs
and related data at termination.

Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: I093cb4ec2c7d8432642edfbffa270797ccf3e715
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13769
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
2022-08-12 08:59:43 +00:00
..
accel_engine examples/accel/perf: remove support for compress 2022-08-10 07:25:29 +00:00
app module/bdev_virtio_scsi: use the correct num_queues value 2022-08-04 11:24:40 +00:00
bdev Test/Bdev: wait PID to exit on error testing 2022-08-02 15:10:02 +00:00
blobfs check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
blobstore test/blobstore: Generate json config with single nvme bdev 2022-07-28 06:56:05 +00:00
common test/vfio: Add override switch for selecting vfio-qemu bin 2022-08-09 08:26:45 +00:00
compress bdev module: remove support for deprecated RPC names 2022-05-23 16:13:00 +00:00
cpp_headers Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
dd test/dd: Simple tests utilizing uring RPCs 2021-12-20 08:46:13 +00:00
dma check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
dpdk_memory_utility check_format: Ignore shellcheck's SC2128 and SC2178 directives 2021-06-30 22:43:05 +00:00
env check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
event check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
external_code check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
fuzz nvme_fuzz: pass trid on command line only 2021-09-27 10:55:34 +00:00
interrupt scripts: move python modules to python directory 2022-04-05 14:40:47 +00:00
ioat build: Example applications build to build/example 2020-06-15 15:27:16 +00:00
iscsi_tgt sock: Add ktls and tls_version to spdk_sock_opts 2022-06-30 07:44:26 +00:00
json_config bdev module: remove support for deprecated RPC names 2022-05-23 16:13:00 +00:00
lvol bdev module: remove support for deprecated RPC names 2022-05-23 16:13:00 +00:00
make test: avoid private and public headers w/ same name 2022-07-21 08:12:21 +00:00
nvme test/reset: Remove unused usage. 2022-08-08 13:48:49 +00:00
nvmf test: disable reconnect test 2022-08-12 02:55:56 +00:00
ocf test/fio: supress fio output files 2022-06-23 07:43:36 +00:00
openstack openstack: change transport type to tcp 2022-06-29 07:09:48 +00:00
pmem bdev module: remove support for deprecated RPC names 2022-05-23 16:13:00 +00:00
rpc scripts: move python modules to python directory 2022-04-05 14:40:47 +00:00
rpc_client check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
rpc_plugins autotest: Use rpc_cmd() for rpc plugin-based tests 2021-04-02 08:22:42 +00:00
scheduler test/scheduler: wait for scheduler after thread creation in busy() 2022-06-20 09:56:09 +00:00
setup test/setup: Remove the hp_status() test 2022-08-09 14:38:30 +00:00
sma test/sma: Add missing --os param to vm_setup() call 2022-08-09 08:27:31 +00:00
spdkcli event/vhost: separate vhost subsystem to scsi and blk 2022-05-20 09:20:07 +00:00
thread Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
unit rdma: Maintain per device PD which is persistent across reconnect 2022-08-12 08:59:43 +00:00
vfio_user test/vfio: Add override switch for selecting vfio-qemu bin 2022-08-09 08:26:45 +00:00
vhost test/vhost: Simplify disk image check for virtio 2022-08-09 08:27:31 +00:00
vmd test: replace VMD_WHITELIST with VMD_ALLOWED 2020-12-03 09:41:07 +00:00
Makefile Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
spdk_cunit.h Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00