Commit 888def10 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

bdev/nvme: Further clean-up of bdev_nvme_reset()



nvme_bdev_ctrlr->reset_bio is accessed only by the thread which called
spdk_for_each_channel() and the callback to spdk_for_each_channel()
is called after unwinding stack via message.

Hence bdev_nvme_reset() can call _bdev_nvme_reset() rather than
_bdev_nvme_reset_start() and store bio into nvme_bdev_ctrlr->reset_bio
after _bdev_nvme_reset() returns zero.

Then inline _bdev_nvme_reset_start() into _bdev_nvme_reset() because
_bdev_nvme_reset_start() has only a single caller now.

The following patches will introduce subsystem and bdev_nvme_reset()
will reset all controllers of a subsystem sequentially. These further
clean-ups will be helpful for such enhancement.

Signed-off-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I25abaa5be511c967ce20c92e4caa7dfeb3e09dd1
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7240


Community-CI: Broadcom CI
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 6d573781
Loading
Loading
Loading
Loading
+8 −25
Original line number Diff line number Diff line
@@ -564,7 +564,7 @@ _bdev_nvme_reset_destroy_qpair(struct spdk_io_channel_iter *i)
}

static int
_bdev_nvme_reset_start(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr)
_bdev_nvme_reset(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr)
{
	pthread_mutex_lock(&nvme_bdev_ctrlr->mutex);
	if (nvme_bdev_ctrlr->destruct) {
@@ -579,26 +579,15 @@ _bdev_nvme_reset_start(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr)
	}

	nvme_bdev_ctrlr->resetting = true;

	pthread_mutex_unlock(&nvme_bdev_ctrlr->mutex);
	return 0;
}

static int
_bdev_nvme_reset(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr)
{
	int rc;

	rc = _bdev_nvme_reset_start(nvme_bdev_ctrlr);
	if (rc == 0) {
	/* First, delete all NVMe I/O queue pairs. */
	spdk_for_each_channel(nvme_bdev_ctrlr,
			      _bdev_nvme_reset_destroy_qpair,
			      nvme_bdev_ctrlr,
			      _bdev_nvme_reset_ctrlr);
	}

	return rc;
	return 0;
}

static int
@@ -607,16 +596,10 @@ bdev_nvme_reset(struct nvme_io_channel *nvme_ch, struct nvme_bdev_io *bio)
	struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(bio);
	int rc;

	rc = _bdev_nvme_reset_start(nvme_ch->ctrlr);
	rc = _bdev_nvme_reset(nvme_ch->ctrlr);
	if (rc == 0) {
		assert(nvme_ch->ctrlr->reset_bio == NULL);
		nvme_ch->ctrlr->reset_bio = bio;

		/* First, delete all NVMe I/O queue pairs. */
		spdk_for_each_channel(nvme_ch->ctrlr,
				      _bdev_nvme_reset_destroy_qpair,
				      nvme_ch->ctrlr,
				      _bdev_nvme_reset_ctrlr);
	} else if (rc == -EBUSY) {
		/* Don't bother resetting if the controller is in the process of being destructed. */
		spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);