lib/nvmf: Add nvmf_transport_qpair_abort_request()
State machine is different among NVMe-oF transports and is encapsulated to the transport neutral NVMe-oF controller and NVMe-oF qpair. To implement abort operation for each NVMe-oF transport, add a function pointer qpair_abort_request to struct spdk_nvmf_transport_ops and a stub nvmf_transport_qpair_abort_request() to encapsulate which transport is used. The following patches will implement qpair_abort_request for each transport. Each qpair_abort_request() is responsible to call spdk_nvmf_request_complete() for the abort request. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I2beac959ed428c5108cf33691226b7fae5cd24d6 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3007 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Michael Haeuptle <michaelhaeuptle@gmail.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
a8beb79ea3
commit
604b4503c4
@ -334,6 +334,15 @@ struct spdk_nvmf_transport_ops {
|
||||
int (*qpair_get_listen_trid)(struct spdk_nvmf_qpair *qpair,
|
||||
struct spdk_nvme_transport_id *trid);
|
||||
|
||||
/*
|
||||
* Abort the request which the abort request specifies.
|
||||
* This function can complete synchronously or asynchronously, but
|
||||
* is expected to call spdk_nvmf_request_complete() in the end
|
||||
* for both cases.
|
||||
*/
|
||||
void (*qpair_abort_request)(struct spdk_nvmf_qpair *qpair,
|
||||
struct spdk_nvmf_request *req);
|
||||
|
||||
/*
|
||||
* Get transport poll group statistics
|
||||
*/
|
||||
|
@ -2103,10 +2103,7 @@ nvmf_qpair_abort_request(struct spdk_nvmf_qpair *qpair, struct spdk_nvmf_request
|
||||
return;
|
||||
}
|
||||
|
||||
/* TODO: track list of outstanding requests in qpair? */
|
||||
SPDK_DEBUGLOG(SPDK_LOG_NVMF, "cid %u not found\n", cid);
|
||||
|
||||
spdk_nvmf_request_complete(req);
|
||||
nvmf_transport_qpair_abort_request(qpair, req);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2116,6 +2116,13 @@ nvmf_fc_qpair_get_listen_trid(struct spdk_nvmf_qpair *qpair,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
nvmf_fc_qpair_abort_request(struct spdk_nvmf_qpair *qpair,
|
||||
struct spdk_nvmf_request *req)
|
||||
{
|
||||
spdk_nvmf_request_complete(req);
|
||||
}
|
||||
|
||||
const struct spdk_nvmf_transport_ops spdk_nvmf_transport_fc = {
|
||||
.name = "FC",
|
||||
.type = (enum spdk_nvme_transport_type) SPDK_NVMF_TRTYPE_FC,
|
||||
@ -2140,6 +2147,7 @@ const struct spdk_nvmf_transport_ops spdk_nvmf_transport_fc = {
|
||||
.qpair_get_peer_trid = nvmf_fc_qpair_get_peer_trid,
|
||||
.qpair_get_local_trid = nvmf_fc_qpair_get_local_trid,
|
||||
.qpair_get_listen_trid = nvmf_fc_qpair_get_listen_trid,
|
||||
.qpair_abort_request = nvmf_fc_qpair_abort_request,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -4026,6 +4026,13 @@ spdk_nvmf_rdma_init_hooks(struct spdk_nvme_rdma_hooks *hooks)
|
||||
g_nvmf_hooks = *hooks;
|
||||
}
|
||||
|
||||
static void
|
||||
nvmf_rdma_qpair_abort_request(struct spdk_nvmf_qpair *qpair,
|
||||
struct spdk_nvmf_request *req)
|
||||
{
|
||||
spdk_nvmf_request_complete(req);
|
||||
}
|
||||
|
||||
static int
|
||||
nvmf_rdma_poll_group_get_stat(struct spdk_nvmf_tgt *tgt,
|
||||
struct spdk_nvmf_transport_poll_group_stat **stat)
|
||||
@ -4122,6 +4129,7 @@ const struct spdk_nvmf_transport_ops spdk_nvmf_transport_rdma = {
|
||||
.qpair_get_peer_trid = nvmf_rdma_qpair_get_peer_trid,
|
||||
.qpair_get_local_trid = nvmf_rdma_qpair_get_local_trid,
|
||||
.qpair_get_listen_trid = nvmf_rdma_qpair_get_listen_trid,
|
||||
.qpair_abort_request = nvmf_rdma_qpair_abort_request,
|
||||
|
||||
.poll_group_get_stat = nvmf_rdma_poll_group_get_stat,
|
||||
.poll_group_free_stat = nvmf_rdma_poll_group_free_stat,
|
||||
|
@ -2459,6 +2459,13 @@ nvmf_tcp_qpair_get_listen_trid(struct spdk_nvmf_qpair *qpair,
|
||||
return nvmf_tcp_qpair_get_trid(qpair, trid, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
nvmf_tcp_qpair_abort_request(struct spdk_nvmf_qpair *qpair,
|
||||
struct spdk_nvmf_request *req)
|
||||
{
|
||||
spdk_nvmf_request_complete(req);
|
||||
}
|
||||
|
||||
#define SPDK_NVMF_TCP_DEFAULT_MAX_QUEUE_DEPTH 128
|
||||
#define SPDK_NVMF_TCP_DEFAULT_AQ_DEPTH 128
|
||||
#define SPDK_NVMF_TCP_DEFAULT_MAX_QPAIRS_PER_CTRLR 128
|
||||
@ -2514,6 +2521,7 @@ const struct spdk_nvmf_transport_ops spdk_nvmf_transport_tcp = {
|
||||
.qpair_get_local_trid = nvmf_tcp_qpair_get_local_trid,
|
||||
.qpair_get_peer_trid = nvmf_tcp_qpair_get_peer_trid,
|
||||
.qpair_get_listen_trid = nvmf_tcp_qpair_get_listen_trid,
|
||||
.qpair_abort_request = nvmf_tcp_qpair_abort_request,
|
||||
};
|
||||
|
||||
SPDK_NVMF_TRANSPORT_REGISTER(tcp, &spdk_nvmf_transport_tcp);
|
||||
|
@ -401,6 +401,13 @@ nvmf_transport_qpair_get_listen_trid(struct spdk_nvmf_qpair *qpair,
|
||||
return qpair->transport->ops->qpair_get_listen_trid(qpair, trid);
|
||||
}
|
||||
|
||||
void
|
||||
nvmf_transport_qpair_abort_request(struct spdk_nvmf_qpair *qpair,
|
||||
struct spdk_nvmf_request *req)
|
||||
{
|
||||
qpair->transport->ops->qpair_abort_request(qpair, req);
|
||||
}
|
||||
|
||||
bool
|
||||
spdk_nvmf_transport_opts_init(const char *transport_name,
|
||||
struct spdk_nvmf_transport_opts *opts)
|
||||
|
@ -76,4 +76,7 @@ int nvmf_transport_qpair_get_local_trid(struct spdk_nvmf_qpair *qpair,
|
||||
int nvmf_transport_qpair_get_listen_trid(struct spdk_nvmf_qpair *qpair,
|
||||
struct spdk_nvme_transport_id *trid);
|
||||
|
||||
void nvmf_transport_qpair_abort_request(struct spdk_nvmf_qpair *qpair,
|
||||
struct spdk_nvmf_request *req);
|
||||
|
||||
#endif /* SPDK_NVMF_TRANSPORT_H */
|
||||
|
@ -179,6 +179,9 @@ DEFINE_STUB(nvmf_bdev_ctrlr_get_dif_ctx, bool,
|
||||
struct spdk_dif_ctx *dif_ctx),
|
||||
true);
|
||||
|
||||
DEFINE_STUB_V(nvmf_transport_qpair_abort_request,
|
||||
(struct spdk_nvmf_qpair *qpair, struct spdk_nvmf_request *req));
|
||||
|
||||
int
|
||||
spdk_nvmf_qpair_disconnect(struct spdk_nvmf_qpair *qpair, nvmf_qpair_disconnect_cb cb_fn, void *ctx)
|
||||
{
|
||||
|
@ -77,6 +77,7 @@ DEFINE_STUB_V(_spdk_trace_record, (uint64_t tsc, uint16_t tpoint_id, uint16_t po
|
||||
DEFINE_STUB_V(spdk_nvmf_ctrlr_data_init, (struct spdk_nvmf_transport_opts *opts,
|
||||
struct spdk_nvmf_ctrlr_data *cdata));
|
||||
DEFINE_STUB_V(spdk_nvmf_request_exec, (struct spdk_nvmf_request *req));
|
||||
DEFINE_STUB(spdk_nvmf_request_complete, int, (struct spdk_nvmf_request *req), 0);
|
||||
DEFINE_STUB(spdk_nvme_transport_id_compare, int, (const struct spdk_nvme_transport_id *trid1,
|
||||
const struct spdk_nvme_transport_id *trid2), 0);
|
||||
DEFINE_STUB_V(nvmf_ctrlr_abort_aer, (struct spdk_nvmf_ctrlr *ctrlr));
|
||||
|
@ -200,6 +200,9 @@ DEFINE_STUB_V(spdk_nvmf_transport_register, (const struct spdk_nvmf_transport_op
|
||||
|
||||
DEFINE_STUB_V(spdk_nvmf_tgt_new_qpair, (struct spdk_nvmf_tgt *tgt, struct spdk_nvmf_qpair *qpair));
|
||||
|
||||
DEFINE_STUB_V(nvmf_transport_qpair_abort_request,
|
||||
(struct spdk_nvmf_qpair *qpair, struct spdk_nvmf_request *req));
|
||||
|
||||
struct spdk_trace_histories *g_trace_histories;
|
||||
|
||||
struct spdk_bdev {
|
||||
|
Loading…
Reference in New Issue
Block a user