From patchwork Tue Jun 18 14:16:56 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 252362 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id DF14C2C00A0 for ; Wed, 19 Jun 2013 00:32:32 +1000 (EST) Received: from localhost ([::1]:33308 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UowlL-0004vK-DW for incoming@patchwork.ozlabs.org; Tue, 18 Jun 2013 10:19:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35926) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uowin-0000Rq-50 for qemu-devel@nongnu.org; Tue, 18 Jun 2013 10:17:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uowil-0001RM-KO for qemu-devel@nongnu.org; Tue, 18 Jun 2013 10:17:21 -0400 Received: from mail-wi0-x22b.google.com ([2a00:1450:400c:c05::22b]:53642) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uowil-0001RE-Co; Tue, 18 Jun 2013 10:17:19 -0400 Received: by mail-wi0-f171.google.com with SMTP id hj3so3484202wib.16 for ; Tue, 18 Jun 2013 07:17:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=0AgMRyM/Ao58A7nZ0Ezgs4PXgz4aqcYYB/4wOY8PwA0=; b=NMKQYPZHNZBnYrE/x75Fz8Rwb8hwyezgbDP+MWG6wuZZUSa++K+B86Jlpsc14KPxYL XxJmU/IlIeehEinfdukZ6hEeJvoJsyXhT6QLASxeEWUcGfZxGNMhErpWuY9q9ldBuO4g C/1ncUGFH1hnxTZHpJx1T5W2l55Q5pxODxOOmpY9hXnzs3xcLcoZikp0skh4HVBgy4a9 i9291nIiW+1PgWdXebGuxu89p3MEeOofoL0j57PBqUfhjniIxW13vuPM/Jws4S70ngWK 0Brki5jFvKS7RKFpzjwT5X6m80pYjx86oySmjYWMw3hV2EaiHdUh2jpE6zNDieU0kNZE 05zw== X-Received: by 10.194.58.239 with SMTP id u15mr10984383wjq.87.1371565038670; Tue, 18 Jun 2013 07:17:18 -0700 (PDT) Received: from playground.lan (net-37-116-217-184.cust.dsl.vodafone.it. [37.116.217.184]) by mx.google.com with ESMTPSA id o14sm2385861wiv.3.2013.06.18.07.17.16 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 18 Jun 2013 07:17:17 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 18 Jun 2013 16:16:56 +0200 Message-Id: <1371565016-2643-8-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1371565016-2643-1-git-send-email-pbonzini@redhat.com> References: <1371565016-2643-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:400c:c05::22b Cc: mdroth@linux.vnet.ibm.com, qemu-stable@nongnu.org Subject: [Qemu-devel] [PATCH 7/7] iscsi: reorganize iscsi_readcapacity_sync X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Avoid the goto, and use the same retry logic for the 10- and 16- byte versions. Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini --- block/iscsi.c | 94 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 46 insertions(+), 48 deletions(-) diff --git a/block/iscsi.c b/block/iscsi.c index 6171b01..0bbf0b1 100644 --- a/block/iscsi.c +++ b/block/iscsi.c @@ -931,60 +931,58 @@ static int iscsi_readcapacity_sync(IscsiLun *iscsilun) int ret = 0; int retries = ISCSI_CMD_RETRIES; -try_again: - switch (iscsilun->type) { - case TYPE_DISK: - task = iscsi_readcapacity16_sync(iscsilun->iscsi, iscsilun->lun); - if (task == NULL || task->status != SCSI_STATUS_GOOD) { - if (task != NULL && task->status == SCSI_STATUS_CHECK_CONDITION - && task->sense.key == SCSI_SENSE_UNIT_ATTENTION - && retries-- > 0) { - scsi_free_scsi_task(task); - goto try_again; - } - error_report("iSCSI: failed to send readcapacity16 command."); - ret = -EINVAL; - goto out; - } - rc16 = scsi_datain_unmarshall(task); - if (rc16 == NULL) { - error_report("iSCSI: Failed to unmarshall readcapacity16 data."); - ret = -EINVAL; - goto out; - } - iscsilun->block_size = rc16->block_length; - iscsilun->num_blocks = rc16->returned_lba + 1; - break; - case TYPE_ROM: - task = iscsi_readcapacity10_sync(iscsilun->iscsi, iscsilun->lun, 0, 0); - if (task == NULL || task->status != SCSI_STATUS_GOOD) { - error_report("iSCSI: failed to send readcapacity10 command."); - ret = -EINVAL; - goto out; - } - rc10 = scsi_datain_unmarshall(task); - if (rc10 == NULL) { - error_report("iSCSI: Failed to unmarshall readcapacity10 data."); - ret = -EINVAL; - goto out; + do { + if (task != NULL) { + scsi_free_scsi_task(task); + task = NULL; } - iscsilun->block_size = rc10->block_size; - if (rc10->lba == 0) { - /* blank disk loaded */ - iscsilun->num_blocks = 0; - } else { - iscsilun->num_blocks = rc10->lba + 1; + + switch (iscsilun->type) { + case TYPE_DISK: + task = iscsi_readcapacity16_sync(iscsilun->iscsi, iscsilun->lun); + if (task != NULL && task->status == SCSI_STATUS_GOOD) { + rc16 = scsi_datain_unmarshall(task); + if (rc16 == NULL) { + error_report("iSCSI: Failed to unmarshall readcapacity16 data."); + ret = -EINVAL; + } else { + iscsilun->block_size = rc16->block_length; + iscsilun->num_blocks = rc16->returned_lba + 1; + } + } + break; + case TYPE_ROM: + task = iscsi_readcapacity10_sync(iscsilun->iscsi, iscsilun->lun, 0, 0); + if (task != NULL && task->status == SCSI_STATUS_GOOD) { + rc10 = scsi_datain_unmarshall(task); + if (rc10 == NULL) { + error_report("iSCSI: Failed to unmarshall readcapacity10 data."); + ret = -EINVAL; + } else { + iscsilun->block_size = rc10->block_size; + if (rc10->lba == 0) { + /* blank disk loaded */ + iscsilun->num_blocks = 0; + } else { + iscsilun->num_blocks = rc10->lba + 1; + } + } + } + break; + default: + return 0; } - break; - default: - break; - } + } while (task != NULL && task->status == SCSI_STATUS_CHECK_CONDITION + && task->sense.key == SCSI_SENSE_UNIT_ATTENTION + && retries-- > 0); -out: + if (task == NULL || task->status != SCSI_STATUS_GOOD) { + error_report("iSCSI: failed to send readcapacity10 command."); + ret = -EINVAL; + } if (task) { scsi_free_scsi_task(task); } - return ret; }