bdev/nvme: Reversed orderings for reset between PCIe and NVMe-oF
As described in the NVMe specification, a controller level reset includes the following actions: - the controller stops processing any outstanding admin or I/O commands; - all I/O SQs and CQs are deleted. In a full controller reset sequence for a PCIe controller, if we do a controller level reset first, we can abort outstanding commands after the hardware has actually been stopped. For NVMe-oF controller, each I/O qpair is an independent network connection and is disconnected safely. We do not want to change NVMe-oF controller. Fixes the issue #2360 Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Change-Id: If05febac74705bfd3df5abd15064c1203126e027 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12447 Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Michael Haeuptle <michaelhaeuptle@gmail.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
09c7c76876
commit
fcf52fbff5
@ -1779,7 +1779,11 @@ bdev_nvme_reset_ctrlr(struct spdk_io_channel_iter *i, int status)
|
||||
|
||||
assert(status == 0);
|
||||
|
||||
nvme_ctrlr_disconnect(nvme_ctrlr, bdev_nvme_reconnect_ctrlr);
|
||||
if (!spdk_nvme_ctrlr_is_fabrics(nvme_ctrlr->ctrlr)) {
|
||||
bdev_nvme_reconnect_ctrlr(nvme_ctrlr);
|
||||
} else {
|
||||
nvme_ctrlr_disconnect(nvme_ctrlr, bdev_nvme_reconnect_ctrlr);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1799,10 +1803,11 @@ _bdev_nvme_reset(void *ctx)
|
||||
assert(nvme_ctrlr->resetting == true);
|
||||
assert(nvme_ctrlr->thread == spdk_get_thread());
|
||||
|
||||
spdk_nvme_ctrlr_prepare_for_reset(nvme_ctrlr->ctrlr);
|
||||
|
||||
/* First, delete all NVMe I/O queue pairs. */
|
||||
bdev_nvme_reset_destroy_qpairs(nvme_ctrlr);
|
||||
if (!spdk_nvme_ctrlr_is_fabrics(nvme_ctrlr->ctrlr)) {
|
||||
nvme_ctrlr_disconnect(nvme_ctrlr, bdev_nvme_reset_destroy_qpairs);
|
||||
} else {
|
||||
bdev_nvme_reset_destroy_qpairs(nvme_ctrlr);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -112,6 +112,8 @@ DEFINE_STUB_V(spdk_nvme_ctrlr_register_aer_callback, (struct spdk_nvme_ctrlr *ct
|
||||
DEFINE_STUB_V(spdk_nvme_ctrlr_register_timeout_callback, (struct spdk_nvme_ctrlr *ctrlr,
|
||||
uint64_t timeout_io_us, uint64_t timeout_admin_us, spdk_nvme_timeout_cb cb_fn, void *cb_arg));
|
||||
|
||||
DEFINE_STUB(spdk_nvme_ctrlr_is_fabrics, bool, (struct spdk_nvme_ctrlr *ctrlr), true);
|
||||
|
||||
DEFINE_STUB(spdk_nvme_ctrlr_is_ocssd_supported, bool, (struct spdk_nvme_ctrlr *ctrlr), false);
|
||||
|
||||
DEFINE_STUB(spdk_nvme_ctrlr_cmd_abort, int, (struct spdk_nvme_ctrlr *ctrlr,
|
||||
|
Loading…
Reference in New Issue
Block a user