The function does the same initialization, and matches with scsi_free_scsi_task() usage, and qemu doesn't need to know the allocator details.
Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- block/iscsi.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) v2: - set cdb_size if API_VERSION < 20150510 diff --git a/block/iscsi.c b/block/iscsi.c index d557c99668..9449c90631 100644 --- a/block/iscsi.c +++ b/block/iscsi.c @@ -1013,6 +1013,7 @@ static BlockAIOCB *iscsi_aio_ioctl(BlockDriverState *bs, struct iscsi_context *iscsi = iscsilun->iscsi; struct iscsi_data data; IscsiAIOCB *acb; + int xfer_dir; acb = qemu_aio_get(&iscsi_aiocb_info, bs, cb, opaque); @@ -1034,31 +1035,30 @@ static BlockAIOCB *iscsi_aio_ioctl(BlockDriverState *bs, return NULL; } - acb->task = malloc(sizeof(struct scsi_task)); - if (acb->task == NULL) { - error_report("iSCSI: Failed to allocate task for scsi command. %s", - iscsi_get_error(iscsi)); - qemu_aio_unref(acb); - return NULL; - } - memset(acb->task, 0, sizeof(struct scsi_task)); - switch (acb->ioh->dxfer_direction) { case SG_DXFER_TO_DEV: - acb->task->xfer_dir = SCSI_XFER_WRITE; + xfer_dir = SCSI_XFER_WRITE; break; case SG_DXFER_FROM_DEV: - acb->task->xfer_dir = SCSI_XFER_READ; + xfer_dir = SCSI_XFER_READ; break; default: - acb->task->xfer_dir = SCSI_XFER_NONE; + xfer_dir = SCSI_XFER_NONE; break; } - acb->task->cdb_size = acb->ioh->cmd_len; - memcpy(&acb->task->cdb[0], acb->ioh->cmdp, acb->ioh->cmd_len); - acb->task->expxferlen = acb->ioh->dxfer_len; + acb->task = scsi_create_task(acb->ioh->cmd_len, acb->ioh->cmdp, + xfer_dir, acb->ioh->dxfer_len); + if (acb->task == NULL) { + error_report("iSCSI: Failed to allocate task for scsi command. %s", + iscsi_get_error(iscsi)); + qemu_aio_unref(acb); + return NULL; + } +#if LIBISCSI_API_VERSION < 20150510 + acb->task->cdb_size = acb->ioh->cmd_len; /* fixed in libiscsi 1.13.0 */ +#endif data.size = 0; qemu_mutex_lock(&iscsilun->mutex); if (acb->task->xfer_dir == SCSI_XFER_WRITE) { -- 2.14.0.rc0.1.g40ca67566