Skip to content

Commit

Permalink
iscsi: Create and use iscsi_co_wait_for_task
Browse files Browse the repository at this point in the history
This loop is repeated a growing number times. Make a helper.

Signed-off-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20180601092648.24614-8-famz@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
  • Loading branch information
Fam Zheng authored and stefanhaRH committed Jun 1, 2018
1 parent cc9743c commit 66e75c0
Showing 1 changed file with 17 additions and 37 deletions.
54 changes: 17 additions & 37 deletions block/iscsi.c
Expand Up @@ -556,6 +556,17 @@ static inline bool iscsi_allocmap_is_valid(IscsiLun *iscsilun,
offset / iscsilun->cluster_size) == size);
}

static void coroutine_fn iscsi_co_wait_for_task(IscsiTask *iTask,
IscsiLun *iscsilun)
{
while (!iTask->complete) {
iscsi_set_events(iscsilun);
qemu_mutex_unlock(&iscsilun->mutex);
qemu_coroutine_yield();
qemu_mutex_lock(&iscsilun->mutex);
}
}

static int coroutine_fn
iscsi_co_writev(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
QEMUIOVector *iov, int flags)
Expand Down Expand Up @@ -617,12 +628,7 @@ iscsi_co_writev(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
scsi_task_set_iov_out(iTask.task, (struct scsi_iovec *) iov->iov,
iov->niov);
#endif
while (!iTask.complete) {
iscsi_set_events(iscsilun);
qemu_mutex_unlock(&iscsilun->mutex);
qemu_coroutine_yield();
qemu_mutex_lock(&iscsilun->mutex);
}
iscsi_co_wait_for_task(&iTask, iscsilun);

if (iTask.task != NULL) {
scsi_free_scsi_task(iTask.task);
Expand Down Expand Up @@ -693,13 +699,7 @@ static int coroutine_fn iscsi_co_block_status(BlockDriverState *bs,
ret = -ENOMEM;
goto out_unlock;
}

while (!iTask.complete) {
iscsi_set_events(iscsilun);
qemu_mutex_unlock(&iscsilun->mutex);
qemu_coroutine_yield();
qemu_mutex_lock(&iscsilun->mutex);
}
iscsi_co_wait_for_task(&iTask, iscsilun);

if (iTask.do_retry) {
if (iTask.task != NULL) {
Expand Down Expand Up @@ -863,13 +863,8 @@ static int coroutine_fn iscsi_co_readv(BlockDriverState *bs,
#if LIBISCSI_API_VERSION < (20160603)
scsi_task_set_iov_in(iTask.task, (struct scsi_iovec *) iov->iov, iov->niov);
#endif
while (!iTask.complete) {
iscsi_set_events(iscsilun);
qemu_mutex_unlock(&iscsilun->mutex);
qemu_coroutine_yield();
qemu_mutex_lock(&iscsilun->mutex);
}

iscsi_co_wait_for_task(&iTask, iscsilun);
if (iTask.task != NULL) {
scsi_free_scsi_task(iTask.task);
iTask.task = NULL;
Expand Down Expand Up @@ -906,12 +901,7 @@ static int coroutine_fn iscsi_co_flush(BlockDriverState *bs)
return -ENOMEM;
}

while (!iTask.complete) {
iscsi_set_events(iscsilun);
qemu_mutex_unlock(&iscsilun->mutex);
qemu_coroutine_yield();
qemu_mutex_lock(&iscsilun->mutex);
}
iscsi_co_wait_for_task(&iTask, iscsilun);

if (iTask.task != NULL) {
scsi_free_scsi_task(iTask.task);
Expand Down Expand Up @@ -1143,12 +1133,7 @@ coroutine_fn iscsi_co_pdiscard(BlockDriverState *bs, int64_t offset, int bytes)
goto out_unlock;
}

while (!iTask.complete) {
iscsi_set_events(iscsilun);
qemu_mutex_unlock(&iscsilun->mutex);
qemu_coroutine_yield();
qemu_mutex_lock(&iscsilun->mutex);
}
iscsi_co_wait_for_task(&iTask, iscsilun);

if (iTask.task != NULL) {
scsi_free_scsi_task(iTask.task);
Expand Down Expand Up @@ -1244,12 +1229,7 @@ coroutine_fn iscsi_co_pwrite_zeroes(BlockDriverState *bs, int64_t offset,
return -ENOMEM;
}

while (!iTask.complete) {
iscsi_set_events(iscsilun);
qemu_mutex_unlock(&iscsilun->mutex);
qemu_coroutine_yield();
qemu_mutex_lock(&iscsilun->mutex);
}
iscsi_co_wait_for_task(&iTask, iscsilun);

if (iTask.status == SCSI_STATUS_CHECK_CONDITION &&
iTask.task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
Expand Down

0 comments on commit 66e75c0

Please sign in to comment.