From patchwork Fri Apr 19 14:24:12 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 237988 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id D14DA2C021C for ; Sat, 20 Apr 2013 00:24:59 +1000 (EST) Received: from localhost ([::1]:41058 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UTCFF-0000YR-OQ for incoming@patchwork.ozlabs.org; Fri, 19 Apr 2013 10:24:57 -0400 Received: from eggs.gnu.org ([208.118.235.92]:36638) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UTCEn-0000WP-Sc for qemu-devel@nongnu.org; Fri, 19 Apr 2013 10:24:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UTCEm-0003DN-4l for qemu-devel@nongnu.org; Fri, 19 Apr 2013 10:24:29 -0400 Received: from mail-ea0-x22b.google.com ([2a00:1450:4013:c01::22b]:63773) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UTCEl-0003DF-VD for qemu-devel@nongnu.org; Fri, 19 Apr 2013 10:24:28 -0400 Received: by mail-ea0-f171.google.com with SMTP id b15so1766689eae.30 for ; Fri, 19 Apr 2013 07:24:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:sender:from:to:cc:subject:date:message-id:x-mailer :in-reply-to:references; bh=XTRZpvoVPWFrurvaPx7rIb0GnKYCoChyvRBxwIGsdoM=; b=LvsPUVSKil8RAe0Fn5asxf+8BzYm0YwuiNXVO46VuWl7xRwEa9PCXhXPogvjyNEUby krmag5rWSDYx9o0IaAZTRo54Y64QG1JJ8iiMyX7vU/lc8hkevR6HC/FV/XVuizSRKjOb m209sEpkMX+48dEgXXeXdict8C8HFqcVl6nY3iifP0YtIcSxen3HYDgf5gadaZErJwlv pRJ+2Z6dXq/MNDDSBymuekk4xibhX5lDhBRFsesZxErYl/gEMWeuKN49wjux5xwyaPyg QjsbImsUZr/741StRVDfxYM8X/GepxirndzFPHmEauV3tzKV34Sw2YxD1CVgg3GThqzs sXPw== X-Received: by 10.14.173.71 with SMTP id u47mr6956841eel.24.1366381467200; Fri, 19 Apr 2013 07:24:27 -0700 (PDT) Received: from playground.lan (93-34-176-20.ip50.fastwebnet.it. [93.34.176.20]) by mx.google.com with ESMTPS id cb50sm23384359eeb.14.2013.04.19.07.24.25 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 19 Apr 2013 07:24:26 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Fri, 19 Apr 2013 16:24:12 +0200 Message-Id: <1366381460-6041-2-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1366381460-6041-1-git-send-email-pbonzini@redhat.com> References: <1366381460-6041-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:4013:c01::22b Cc: asias@redhat.com, nab@linux-iscsi.org Subject: [Qemu-devel] [PATCH 1/9] scsi: avoid assertion failure on VERIFY command 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 A verify command is not an actual read (we do not implement compare mode) and thus does not have an AIOCB attached. Do not crash in scsi_dma_complete. Signed-off-by: Paolo Bonzini --- hw/scsi/scsi-disk.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index f52bd11..c8d2a99 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -244,14 +244,15 @@ done: } } -static void scsi_dma_complete(void *opaque, int ret) +static void scsi_dma_complete_noio(void *opaque, int ret) { SCSIDiskReq *r = (SCSIDiskReq *)opaque; SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev); - assert(r->req.aiocb != NULL); - r->req.aiocb = NULL; - bdrv_acct_done(s->qdev.conf.bs, &r->acct); + if (r->req.aiocb != NULL) { + r->req.aiocb = NULL; + bdrv_acct_done(s->qdev.conf.bs, &r->acct); + } if (r->req.io_canceled) { goto done; } @@ -277,6 +278,14 @@ done: } } +static void scsi_dma_complete(void *opaque, int ret) +{ + SCSIDiskReq *r = (SCSIDiskReq *)opaque; + + assert(r->req.aiocb != NULL); + scsi_dma_complete_noio(opaque, ret); +} + static void scsi_read_complete(void * opaque, int ret) { SCSIDiskReq *r = (SCSIDiskReq *)opaque; @@ -496,7 +505,7 @@ static void scsi_write_data(SCSIRequest *req) if (r->req.cmd.buf[0] == VERIFY_10 || r->req.cmd.buf[0] == VERIFY_12 || r->req.cmd.buf[0] == VERIFY_16) { if (r->req.sg) { - scsi_dma_complete(r, 0); + scsi_dma_complete_noio(r, 0); } else { scsi_write_complete(r, 0); }