On 08/02/2018 15:08, Stefan Hajnoczi wrote: > Now on to libiscsi: > > The iscsi_task_mgmt_async() API documentation says: > > * abort_task will also cancel the scsi task. The callback for the > scsi task will be invoked with > * SCSI_STATUS_CANCELLED > > I see that the ABORT TASK TMF response invokes the user's > iscsi_task_mgmt_async() callback but not the command callback. I'm > not sure how the command callback is invoked with > SCSI_STATUS_CANCELLED unless libiscsi is relying on the target to send > that response. > > Is libiscsi honoring its iscsi_task_mgmt_async() contract?
No, and QEMU is assuming the "wrong" behavior: static void iscsi_abort_task_cb(struct iscsi_context *iscsi, int status, void *command_data, void *private_data) { IscsiAIOCB *acb = private_data; acb->status = -ECANCELED; iscsi_schedule_bh(acb); } Paolo