From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:58302) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RSUZv-0004kg-Ck for qemu-devel@nongnu.org; Mon, 21 Nov 2011 09:10:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RSUZu-0000Pm-8G for qemu-devel@nongnu.org; Mon, 21 Nov 2011 09:10:35 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53106) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RSUZt-0000Pg-Sv for qemu-devel@nongnu.org; Mon, 21 Nov 2011 09:10:34 -0500 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id pALEAX4N023079 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 21 Nov 2011 09:10:33 -0500 Message-ID: <4ECA5BD7.2070008@redhat.com> Date: Mon, 21 Nov 2011 15:10:31 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1321882802-3337-1-git-send-email-kraxel@redhat.com> <1321882802-3337-7-git-send-email-kraxel@redhat.com> In-Reply-To: <1321882802-3337-7-git-send-email-kraxel@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 6/8] usb-storage: don't try to send the status early. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: qemu-devel@nongnu.org On 11/21/2011 02:40 PM, Gerd Hoffmann wrote: > Until recently all scsi commands sent to scsi-disk did either transfer > data or finished instantly. The correct implementation of > SYNCRONIZE_CACHE changed the picture though, and usb-storage needs > a fix to handle that case correctly. > --- > hw/usb-msd.c | 16 ++++++++++------ > 1 files changed, 10 insertions(+), 6 deletions(-) > > diff --git a/hw/usb-msd.c b/hw/usb-msd.c > index 6f32a0e..68e3756 100644 > --- a/hw/usb-msd.c > +++ b/hw/usb-msd.c > @@ -378,9 +378,7 @@ static int usb_msd_handle_data(USBDevice *dev, USBPacket *p) > s->scsi_len = 0; > s->req = scsi_req_new(s->scsi_dev, tag, 0, cbw.cmd, NULL); > scsi_req_enqueue(s->req); > - /* ??? Should check that USB and SCSI data transfer > - directions match. */ > - if (s->mode != USB_MSDM_CSW&& s->residue == 0) { > + if (s->req&& s->req->cmd.xfer != SCSI_XFER_NONE) { > scsi_req_continue(s->req); > } > ret = p->result; > @@ -439,9 +437,15 @@ static int usb_msd_handle_data(USBDevice *dev, USBPacket *p) > goto fail; > } > > - usb_msd_send_status(s, p); > - s->mode = USB_MSDM_CBW; > - ret = 13; > + if (s->req) { > + /* still in flight */ > + s->packet = p; > + ret = USB_RET_ASYNC; > + } else { > + usb_msd_send_status(s, p); > + s->mode = USB_MSDM_CBW; > + ret = 13; > + } > break; > > case USB_MSDM_DATAIN: Acked-by: Paolo Bonzini ... even without 5/8. Paolo