Spdk/test/unit/lib
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 unit test/accel: Add 2 new unit tests for recent additions 2022-08-10 07:25:29 +00:00
bdev module/raid: raid5: rename to raid5f 2022-07-27 08:51:21 +00:00
blob lib/blob: Fix deleting a snapshot after decoupling it from its parent 2022-08-05 08:30:30 +00:00
blobfs check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
dma Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
env_dpdk check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
event Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
ftl ftl: superblock 2022-08-02 19:00:42 +00:00
idxd idxd: rename internal header file to idxd_internal.h 2022-07-21 07:03:26 +00:00
init Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
ioat check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
iscsi check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
json json: fix wrong param in json_parse_ut.c calling function 'spdk_json_parse' 2022-08-05 08:28:44 +00:00
jsonrpc check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
log check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
lvol blobstore: implement spdk_bs_grow and bdev_lvol_grow_lvstore RPC 2022-06-28 17:55:43 +00:00
notify Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
nvme nvme: Add transport controller ready step 2022-08-04 07:29:03 +00:00
nvmf nvmf/rdma: remove lock on few transport ops 2022-07-29 16:34:41 +00:00
rdma rdma: Maintain per device PD which is persistent across reconnect 2022-08-12 08:59:43 +00:00
reduce check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
rpc check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
scsi check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
sock sock: add assertions checking sock_impl_opts size 2022-07-29 16:49:54 +00:00
thread thread: defer unregistration when for_each ops exist 2022-08-09 08:27:15 +00:00
util util: Extract a common lib between iovs and buf. 2022-06-20 10:01:15 +00:00
vhost check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
json_mock.c Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
Makefile rdma: Maintain per device PD which is persistent across reconnect 2022-08-12 08:59:43 +00:00