From 0a77a92d74f98e4898cb54c945ada84768427851 Mon Sep 17 00:00:00 2001 From: Peter Lieven Date: Tue, 18 Feb 2014 13:08:39 +0100 Subject: [PATCH] block/iscsi: fix deadlock on scsi check condition the retry logic was broken because the complete status of the task structure was not reset. this resulted in an infinite loop retrying the command over and over. CC: qemu-stable@nongnu.org Signed-off-by: Peter Lieven Signed-off-by: Paolo Bonzini (cherry picked from commit 837c390137193e715fee20b35c0ddb164b1c4fa4) Conflicts: block/iscsi.c *only modified retry clauses present before 063c3378 Signed-off-by: Michael Roth --- block/iscsi.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/block/iscsi.c b/block/iscsi.c index a410a28e38..75a4001c61 100644 --- a/block/iscsi.c +++ b/block/iscsi.c @@ -143,12 +143,13 @@ iscsi_co_generic_cb(struct iscsi_context *iscsi, int status, if (iTask->retries-- > 0 && status == SCSI_STATUS_CHECK_CONDITION && task->sense.key == SCSI_SENSE_UNIT_ATTENTION) { + error_report("iSCSI CheckCondition: %s", iscsi_get_error(iscsi)); iTask->do_retry = 1; goto out; } if (status != SCSI_STATUS_GOOD) { - error_report("iSCSI: Failure. %s", iscsi_get_error(iscsi)); + error_report("iSCSI Failure: %s", iscsi_get_error(iscsi)); } out: @@ -868,6 +869,7 @@ retry: scsi_free_scsi_task(iTask.task); iTask.task = NULL; } + iTask.complete = 0; goto retry; } @@ -964,6 +966,7 @@ retry: } if (iTask.do_retry) { + iTask.complete = 0; goto retry; }