diff --git a/include/spdk_internal/accel_module.h b/include/spdk_internal/accel_module.h index ee69a299e..90c9a08d4 100644 --- a/include/spdk_internal/accel_module.h +++ b/include/spdk_internal/accel_module.h @@ -63,7 +63,6 @@ struct spdk_accel_task { struct iovec *iovs; uint32_t iovcnt; } s2; - void *dst; }; union { struct { @@ -81,10 +80,7 @@ struct spdk_accel_task { }; enum accel_opcode op_code; uint64_t nbytes; - union { - uint64_t nbytes_dst; /* for compress op */ - uint64_t iv; /* Initialization vector (tweak) for crypto op */ - }; + uint64_t iv; /* Initialization vector (tweak) for crypto op */ int flags; int status; struct iovec aux_iovs[SPDK_ACCEL_AUX_IOV_MAX]; diff --git a/lib/accel/accel.c b/lib/accel/accel.c index fbb5a4f35..92dbdf85a 100644 --- a/lib/accel/accel.c +++ b/lib/accel/accel.c @@ -502,23 +502,19 @@ spdk_accel_submit_compress(struct spdk_io_channel *ch, void *dst, uint64_t nbyte struct spdk_accel_task *accel_task; struct spdk_accel_module_if *module = g_modules_opc[ACCEL_OPC_COMPRESS]; struct spdk_io_channel *module_ch = accel_ch->module_ch[ACCEL_OPC_COMPRESS]; - size_t i, src_len = 0; accel_task = _get_task(accel_ch, cb_fn, cb_arg); if (accel_task == NULL) { return -ENOMEM; } - for (i = 0; i < src_iovcnt; i++) { - src_len += src_iovs[i].iov_len; - } - - accel_task->nbytes = src_len; + accel_task->d.iovs = &accel_task->aux_iovs[SPDK_ACCEL_AUX_IOV_DST]; + accel_task->d.iovs[0].iov_base = dst; + accel_task->d.iovs[0].iov_len = nbytes; + accel_task->d.iovcnt = 1; accel_task->output_size = output_size; accel_task->s.iovs = src_iovs; accel_task->s.iovcnt = src_iovcnt; - accel_task->dst = dst; - accel_task->nbytes_dst = nbytes; accel_task->flags = flags; accel_task->op_code = ACCEL_OPC_COMPRESS; accel_task->src_domain = NULL; diff --git a/lib/accel/accel_sw.c b/lib/accel/accel_sw.c index 1306066c7..0029ca8df 100644 --- a/lib/accel/accel_sw.c +++ b/lib/accel/accel_sw.c @@ -239,13 +239,14 @@ _sw_accel_compress(struct sw_accel_io_channel *sw_ch, struct spdk_accel_task *ac size_t last_seglen = accel_task->s.iovs[accel_task->s.iovcnt - 1].iov_len; struct iovec *siov = accel_task->s.iovs; struct iovec *diov = accel_task->d.iovs; - size_t remaining = accel_task->nbytes; - uint32_t s = 0, d = 0; + size_t remaining; + uint32_t i, s = 0, d = 0; int rc = 0; - accel_task->d.iovcnt = 1; - diov[0].iov_base = accel_task->dst; - diov[0].iov_len = accel_task->nbytes_dst; + remaining = 0; + for (i = 0; i < accel_task->s.iovcnt; ++i) { + remaining += accel_task->s.iovs[i].iov_len; + } isal_deflate_reset(&sw_ch->stream); sw_ch->stream.end_of_stream = 0; diff --git a/module/accel/iaa/accel_iaa.c b/module/accel/iaa/accel_iaa.c index 1aabac22c..190c536ea 100644 --- a/module/accel/iaa/accel_iaa.c +++ b/module/accel/iaa/accel_iaa.c @@ -137,8 +137,9 @@ _process_single_task(struct spdk_io_channel *ch, struct spdk_accel_task *task) switch (task->op_code) { case ACCEL_OPC_COMPRESS: - rc = spdk_idxd_submit_compress(chan->chan, task->dst, task->nbytes_dst, task->s.iovs, - task->s.iovcnt, task->output_size, flags, iaa_done, idxd_task); + rc = spdk_idxd_submit_compress(chan->chan, task->d.iovs[0].iov_base, task->d.iovs[0].iov_len, + task->s.iovs, task->s.iovcnt, task->output_size, flags, + iaa_done, idxd_task); break; case ACCEL_OPC_DECOMPRESS: rc = spdk_idxd_submit_decompress(chan->chan, task->d.iovs, task->d.iovcnt, task->s.iovs, diff --git a/test/unit/lib/accel/accel.c/accel_ut.c b/test/unit/lib/accel/accel.c/accel_ut.c index 330d0a3d8..8f8bebef7 100644 --- a/test/unit/lib/accel/accel.c/accel_ut.c +++ b/test/unit/lib/accel/accel.c/accel_ut.c @@ -395,7 +395,6 @@ test_spdk_accel_submit_crc32cv(void) iov[i].iov_len = TEST_SUBMIT_SIZE; } - task.nbytes = TEST_SUBMIT_SIZE; TAILQ_INSERT_TAIL(&g_accel_ch->task_pool, &task, link); /* accel submission OK. */ @@ -407,7 +406,6 @@ test_spdk_accel_submit_crc32cv(void) CU_ASSERT(task.seed == seed); CU_ASSERT(task.op_code == ACCEL_OPC_CRC32C); CU_ASSERT(task.cb_arg == cb_arg); - CU_ASSERT(task.nbytes == iov[0].iov_len); expected_accel_task = TAILQ_FIRST(&g_sw_ch->tasks_to_complete); TAILQ_REMOVE(&g_sw_ch->tasks_to_complete, expected_accel_task, link); CU_ASSERT(expected_accel_task == &task);