Spdk/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 accel: SPDK_ACCEL_MODULE_REGISTER is now passed the module 2022-08-10 11:00:17 +00:00
bdev bdev/qos: Process whole QoS queue on every Qos poll 2022-07-26 08:33:45 +00:00
blob lib/blob: Fix deleting a snapshot after decoupling it from its parent 2022-08-05 08:30:30 +00:00
blobfs blobfs: rename tree.h to cache_tree.h 2022-07-21 07:03:26 +00:00
conf Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
dma check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
env_dpdk check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
env_ocf check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
event event: require opts->name is set 2022-08-05 10:48:42 +00:00
ftl FTL: move assert earlier before accessing the field 2022-08-08 13:48:28 +00:00
idxd lib/idxd: fix bugs with IAA decompression descriptor construction 2022-08-10 07:25:29 +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 check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
jsonrpc check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
log Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
lvol blobstore: implement spdk_bs_grow and bdev_lvol_grow_lvstore RPC 2022-06-28 17:55:43 +00:00
nbd check_format: For C files only, fix return type breaks 2022-06-27 09:33:48 +00:00
notify Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
nvme nvme: Increase major SO version 2022-08-11 19:16:32 +00:00
nvmf lib/nvmf: don't raise assertion in nvmf_tgt_destroy_cb 2022-08-04 07:29:27 +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
rocksdb Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
rpc Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
scsi lib/scsi: use bkdr hash to avoid naa identifier collision 2022-08-03 07:43:10 +00:00
sock sock: Add ktls and tls_version to spdk_sock_impl_opts 2022-07-22 06:41:39 +00:00
thread thread: defer unregistration when for_each ops exist 2022-08-09 08:27:15 +00:00
trace Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
trace_parser Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
ut_mock Replace most BSD 3-clause license text with SPDX identifier. 2022-06-09 07:35:12 +00:00
util util: Extract a common lib between iovs and buf. 2022-06-20 10:01:15 +00:00
vfio_user lib/vfio_user: change the calculation of bar_addr 2022-06-15 08:10:32 +00:00
vhost lib/vhost: Add submit_inflight_desc() to cpu usage statistic 2022-08-09 11:48:51 +00:00
virtio module/bdev_virtio_scsi: use the correct num_queues value 2022-08-04 11:24:40 +00:00
vmd vmd: rename internal header file to vmd_internal.h 2022-07-21 07:03:26 +00:00
Makefile ftl: core structure 2022-07-11 07:23:58 +00:00