bdev/nvme: Factor out abort to-be-retried I/O into a helper function
This is in the same effort as gathering all retry functions into the same place. This will make the following patches easier. Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Change-Id: If2a017ebda45eb1eaf0dc93b15d02b4122dc3be0 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15958 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
47e4c931e8
commit
02acec4e26
@ -1022,6 +1022,23 @@ bdev_nvme_abort_retry_ios(struct nvme_bdev_channel *nbdev_ch)
|
|||||||
spdk_poller_unregister(&nbdev_ch->retry_io_poller);
|
spdk_poller_unregister(&nbdev_ch->retry_io_poller);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
bdev_nvme_abort_retry_io(struct nvme_bdev_channel *nbdev_ch,
|
||||||
|
struct nvme_bdev_io *bio_to_abort)
|
||||||
|
{
|
||||||
|
struct spdk_bdev_io *bdev_io_to_abort;
|
||||||
|
|
||||||
|
TAILQ_FOREACH(bdev_io_to_abort, &nbdev_ch->retry_io_list, module_link) {
|
||||||
|
if ((struct nvme_bdev_io *)bdev_io_to_abort->driver_ctx == bio_to_abort) {
|
||||||
|
TAILQ_REMOVE(&nbdev_ch->retry_io_list, bdev_io_to_abort, module_link);
|
||||||
|
__bdev_nvme_io_complete(bdev_io_to_abort, SPDK_BDEV_IO_STATUS_ABORTED, NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bdev_nvme_update_nvme_error_stat(struct spdk_bdev_io *bdev_io, const struct spdk_nvme_cpl *cpl)
|
bdev_nvme_update_nvme_error_stat(struct spdk_bdev_io *bdev_io, const struct spdk_nvme_cpl *cpl)
|
||||||
{
|
{
|
||||||
@ -6735,24 +6752,20 @@ bdev_nvme_abort(struct nvme_bdev_channel *nbdev_ch, struct nvme_bdev_io *bio,
|
|||||||
struct nvme_bdev_io *bio_to_abort)
|
struct nvme_bdev_io *bio_to_abort)
|
||||||
{
|
{
|
||||||
struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(bio);
|
struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(bio);
|
||||||
struct spdk_bdev_io *bdev_io_to_abort;
|
|
||||||
struct nvme_io_path *io_path;
|
struct nvme_io_path *io_path;
|
||||||
struct nvme_ctrlr *nvme_ctrlr;
|
struct nvme_ctrlr *nvme_ctrlr;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
bio->orig_thread = spdk_get_thread();
|
bio->orig_thread = spdk_get_thread();
|
||||||
|
|
||||||
/* Traverse the retry_io_list first. */
|
rc = bdev_nvme_abort_retry_io(nbdev_ch, bio_to_abort);
|
||||||
TAILQ_FOREACH(bdev_io_to_abort, &nbdev_ch->retry_io_list, module_link) {
|
if (rc == 0) {
|
||||||
if ((struct nvme_bdev_io *)bdev_io_to_abort->driver_ctx == bio_to_abort) {
|
__bdev_nvme_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_SUCCESS, NULL);
|
||||||
TAILQ_REMOVE(&nbdev_ch->retry_io_list, bdev_io_to_abort, module_link);
|
return;
|
||||||
__bdev_nvme_io_complete(bdev_io_to_abort, SPDK_BDEV_IO_STATUS_ABORTED, NULL);
|
|
||||||
|
|
||||||
__bdev_nvme_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_SUCCESS, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc = 0;
|
||||||
|
|
||||||
/* Even admin commands, they were submitted to only nvme_ctrlrs which were
|
/* Even admin commands, they were submitted to only nvme_ctrlrs which were
|
||||||
* on any io_path. So traverse the io_path list for not only I/O commands
|
* on any io_path. So traverse the io_path list for not only I/O commands
|
||||||
* but also admin commands.
|
* but also admin commands.
|
||||||
|
Loading…
Reference in New Issue
Block a user