bdev/nvme: Clean up bdev_nvme_reset() to clarify the failover case
Swap the resetting case and the non-resetting case. Unlock mutex before calling spdk_bdev_io_complete(). Use curr_trid instead of tmp_trid to clarify the meaning of the stored value. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: If3b520a16459aba498ac80ed887b9223ac5ca3d8 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4523 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Mellanox Build Bot Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
5908576131
commit
0004476aac
@ -434,8 +434,6 @@ _bdev_nvme_reset(struct spdk_io_channel_iter *i, int status)
|
|||||||
_bdev_nvme_reset_create_qpair,
|
_bdev_nvme_reset_create_qpair,
|
||||||
bio,
|
bio,
|
||||||
_bdev_nvme_reset_create_qpairs_done);
|
_bdev_nvme_reset_create_qpairs_done);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -458,36 +456,31 @@ bdev_nvme_reset(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, struct nvme_bdev_io *bi
|
|||||||
{
|
{
|
||||||
struct spdk_io_channel *ch;
|
struct spdk_io_channel *ch;
|
||||||
struct nvme_io_channel *nvme_ch;
|
struct nvme_io_channel *nvme_ch;
|
||||||
struct nvme_bdev_ctrlr_trid *next_trid = NULL, *tmp_trid = NULL;
|
struct nvme_bdev_ctrlr_trid *curr_trid = NULL, *next_trid = NULL;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
pthread_mutex_lock(&g_bdev_nvme_mutex);
|
pthread_mutex_lock(&g_bdev_nvme_mutex);
|
||||||
if (nvme_bdev_ctrlr->destruct) {
|
if (nvme_bdev_ctrlr->destruct) {
|
||||||
|
pthread_mutex_unlock(&g_bdev_nvme_mutex);
|
||||||
/* Don't bother resetting if the controller is in the process of being destructed. */
|
/* Don't bother resetting if the controller is in the process of being destructed. */
|
||||||
if (bio) {
|
if (bio) {
|
||||||
spdk_bdev_io_complete(spdk_bdev_io_from_ctx(bio), SPDK_BDEV_IO_STATUS_FAILED);
|
spdk_bdev_io_complete(spdk_bdev_io_from_ctx(bio), SPDK_BDEV_IO_STATUS_FAILED);
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&g_bdev_nvme_mutex);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (failover) {
|
if (failover) {
|
||||||
tmp_trid = TAILQ_FIRST(&nvme_bdev_ctrlr->trids);
|
curr_trid = TAILQ_FIRST(&nvme_bdev_ctrlr->trids);
|
||||||
assert(tmp_trid);
|
assert(curr_trid);
|
||||||
assert(&tmp_trid->trid == nvme_bdev_ctrlr->connected_trid);
|
assert(&curr_trid->trid == nvme_bdev_ctrlr->connected_trid);
|
||||||
next_trid = TAILQ_NEXT(tmp_trid, link);
|
next_trid = TAILQ_NEXT(curr_trid, link);
|
||||||
if (!next_trid) {
|
if (!next_trid) {
|
||||||
failover = false;
|
failover = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!nvme_bdev_ctrlr->resetting) {
|
if (nvme_bdev_ctrlr->resetting) {
|
||||||
nvme_bdev_ctrlr->resetting = true;
|
if (failover && !nvme_bdev_ctrlr->failover_in_progress) {
|
||||||
if (failover) {
|
|
||||||
nvme_bdev_ctrlr->failover_in_progress = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (next_trid && !nvme_bdev_ctrlr->failover_in_progress) {
|
|
||||||
rc = -EAGAIN;
|
rc = -EAGAIN;
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&g_bdev_nvme_mutex);
|
pthread_mutex_unlock(&g_bdev_nvme_mutex);
|
||||||
@ -507,7 +500,10 @@ bdev_nvme_reset(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, struct nvme_bdev_io *bi
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nvme_bdev_ctrlr->resetting = true;
|
||||||
if (failover) {
|
if (failover) {
|
||||||
|
nvme_bdev_ctrlr->failover_in_progress = true;
|
||||||
|
|
||||||
spdk_nvme_ctrlr_fail(nvme_bdev_ctrlr->ctrlr);
|
spdk_nvme_ctrlr_fail(nvme_bdev_ctrlr->ctrlr);
|
||||||
nvme_bdev_ctrlr->connected_trid = &next_trid->trid;
|
nvme_bdev_ctrlr->connected_trid = &next_trid->trid;
|
||||||
rc = spdk_nvme_ctrlr_set_trid(nvme_bdev_ctrlr->ctrlr, &next_trid->trid);
|
rc = spdk_nvme_ctrlr_set_trid(nvme_bdev_ctrlr->ctrlr, &next_trid->trid);
|
||||||
@ -515,8 +511,8 @@ bdev_nvme_reset(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, struct nvme_bdev_io *bi
|
|||||||
/** Shuffle the old trid to the end of the list and use the new one.
|
/** Shuffle the old trid to the end of the list and use the new one.
|
||||||
* Allows for round robin through multiple connections.
|
* Allows for round robin through multiple connections.
|
||||||
*/
|
*/
|
||||||
TAILQ_REMOVE(&nvme_bdev_ctrlr->trids, tmp_trid, link);
|
TAILQ_REMOVE(&nvme_bdev_ctrlr->trids, curr_trid, link);
|
||||||
TAILQ_INSERT_TAIL(&nvme_bdev_ctrlr->trids, tmp_trid, link);
|
TAILQ_INSERT_TAIL(&nvme_bdev_ctrlr->trids, curr_trid, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_unlock(&g_bdev_nvme_mutex);
|
pthread_mutex_unlock(&g_bdev_nvme_mutex);
|
||||||
|
Loading…
Reference in New Issue
Block a user