Commit 9297211c authored by Sebastian Brzezinka's avatar Sebastian Brzezinka Committed by Tomasz Zawadzki
Browse files

bdev/nvme: Delay callbacks when the next operation is a failover



Previously, when failover was the next operation after a reset,
callbacks notified the `bdev` layer about the successful operation,
and scheduled another reset.

This patch ensures that there is no ongoing failover when a successful
callback is sent.

Fixes issue #3206.

Change-Id: I649204a8d8f9fa05684ad9ce0fb0a5d94989cfae
Signed-off-by: default avatarSebastian Brzezinka <sebastian.brzezinka@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/21901


Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 2f641044
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2034,7 +2034,8 @@ _bdev_nvme_reset_ctrlr_complete(struct spdk_io_channel_iter *i, int status)
	op_after_reset = bdev_nvme_check_op_after_reset(nvme_ctrlr, success);
	pthread_mutex_unlock(&nvme_ctrlr->mutex);

	if (ctrlr_op_cb_fn) {
	/* Delay callbacks when the next operation is a failover. */
	if (ctrlr_op_cb_fn && op_after_reset != OP_FAILOVER) {
		ctrlr_op_cb_fn(ctrlr_op_cb_arg, success ? 0 : -1);
	}

@@ -2050,6 +2051,8 @@ _bdev_nvme_reset_ctrlr_complete(struct spdk_io_channel_iter *i, int status)
		nvme_ctrlr_disconnect(nvme_ctrlr, bdev_nvme_start_reconnect_delay_timer);
		break;
	case OP_FAILOVER:
		nvme_ctrlr->ctrlr_op_cb_fn = ctrlr_op_cb_fn;
		nvme_ctrlr->ctrlr_op_cb_arg = ctrlr_op_cb_arg;
		bdev_nvme_failover_ctrlr(nvme_ctrlr);
		break;
	default: