Commit b264e22f authored by Konrad Sztyber's avatar Konrad Sztyber
Browse files

accel/error: fix callback type for tasks in a sequence



Tasks which are part of a sequence use step_cb_fn instead of cb_fn, so
we have to override the correct field and use a correct callback type.

Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: Ie4588e5c7fcdab6d33aaa2c848726cf7bd3b1644
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/25285


Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Community-CI: Mellanox Build Bot
Community-CI: Community CI Samsung <spdk.community.ci.samsung@gmail.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 0732c143
Loading
Loading
Loading
Loading
+29 −8
Original line number Diff line number Diff line
@@ -28,7 +28,10 @@ struct accel_error_channel {

struct accel_error_task {
	struct accel_error_channel		*ch;
	spdk_accel_completion_cb	cb_fn;
	union {
		spdk_accel_completion_cb	cpl;
		spdk_accel_step_cb		step;
	} cb_fn;
	void					*cb_arg;
	int					status;
	STAILQ_ENTRY(accel_error_task)		link;
@@ -67,13 +70,26 @@ accel_error_corrupt_cb(void *arg, int status)
{
	struct spdk_accel_task *task = arg;
	struct accel_error_task *errtask = accel_error_get_task_ctx(task);
	spdk_accel_completion_cb cb_fn = errtask->cb_fn;
	spdk_accel_completion_cb cb_fn = errtask->cb_fn.cpl;
	void *cb_arg = errtask->cb_arg;

	accel_error_corrupt_task(task);
	cb_fn(cb_arg, status);
}

static void
accel_error_corrupt_step_cb(void *arg)
{
	struct spdk_accel_task *task = arg;
	struct accel_error_task *errtask = accel_error_get_task_ctx(task);
	spdk_accel_step_cb cb_fn = errtask->cb_fn.step;
	void *cb_arg = errtask->cb_arg;

	accel_error_corrupt_task(task);

	cb_fn(cb_arg);
}

static bool
accel_error_should_inject(struct spdk_io_channel *ch, struct spdk_accel_task *task)
{
@@ -115,10 +131,15 @@ accel_error_submit_tasks(struct spdk_io_channel *ch, struct spdk_accel_task *tas
	switch (info->opts.type) {
	case ACCEL_ERROR_INJECT_CORRUPT:
		errtask->ch = errch;
		errtask->cb_fn = task->cb_fn;
		errtask->cb_arg = task->cb_arg;
		task->cb_fn = accel_error_corrupt_cb;
		task->cb_arg = task;
		if (task->seq != NULL) {
			errtask->cb_fn.step = task->step_cb_fn;
			task->step_cb_fn = accel_error_corrupt_step_cb;
		} else {
			errtask->cb_fn.cpl = task->cb_fn;
			task->cb_fn = accel_error_corrupt_cb;
		}
		break;
	case ACCEL_ERROR_INJECT_FAILURE:
		errtask->status = info->opts.errcode;