qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] scsi-generic: don't report negative length to t


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH] scsi-generic: don't report negative length to the SCSI adapter
Date: Thu, 02 Sep 2010 16:32:20 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.11) Gecko/20100720 Fedora/3.0.6-1.fc12 Thunderbird/3.0.6

Am 02.09.2010 15:27, schrieb Bernhard Kohl:
> Some drivers report an incorrect number for 'resid'. I found that for
> MODE_SENSE(6) on an IET iSCSI device. This device reports the
> available mode data length minus actually transferred length.
> 
> This is already a known problem:
> http://tldp.org/HOWTO/SCSI-Generic-HOWTO/x356.html
> 
> Signed-off-by: Bernhard Kohl <address@hidden>
> ---
>  hw/scsi-generic.c |    6 +++++-
>  1 files changed, 5 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/scsi-generic.c b/hw/scsi-generic.c
> index 9538027..836678c 100644
> --- a/hw/scsi-generic.c
> +++ b/hw/scsi-generic.c
> @@ -169,7 +169,11 @@ static void scsi_read_complete(void * opaque, int ret)
>          return;
>      }
>      len = r->io_header.dxfer_len - r->io_header.resid;
> -    DPRINTF("Data ready tag=0x%x len=%d\n", r->req.tag, len);
> +    if (len < 0) {
> +        len = r->io_header.dxfer_len;
> +    }
> +    DPRINTF("Data ready tag=0x%x len=%d dxfer_len=%d resid=%d\n",
> +            r->req.tag, len, r->io_header.dxfer_len, r->io_header.resid);
>  
>      r->len = -1;
>      r->req.bus->complete(r->req.bus, SCSI_REASON_DATA, r->req.tag, len);

Can we add a comment why len can become < 0 and that this is a
workaround for buggy drivers? It's in your commit message, but I prefer
this kind of things to be explained in the code.

Also, are we sure that broken drivers always return negative numbers
when their result is wrong, or can we still get incorrect results?

Kevin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]