All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Bernhard Kohl <bernhard.kohl@nsn.com>
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH v2 2/6] scsi-disk: fix the mode data header returned by the MODE SENSE(10) command
Date: Tue, 31 Aug 2010 11:47:38 +0200	[thread overview]
Message-ID: <4C7CCFBA.7050501@redhat.com> (raw)
In-Reply-To: <1283246554-10253-3-git-send-email-bernhard.kohl@nsn.com>

Am 31.08.2010 11:22, schrieb Bernhard Kohl:
> The header for the  MODE SENSE(10) command is 8 bytes long.
> 
> Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
> ---
>  hw/scsi-disk.c |   33 +++++++++++++++++++++++++++------
>  1 files changed, 27 insertions(+), 6 deletions(-)
> 
> diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
> index b627ffe..942ae96 100644
> --- a/hw/scsi-disk.c
> +++ b/hw/scsi-disk.c
> @@ -607,6 +607,7 @@ static int scsi_disk_emulate_mode_sense(SCSIRequest *req, uint8_t *outbuf)
>      uint64_t nb_sectors;
>      int page, dbd, buflen;
>      uint8_t *p;
> +    uint8_t dev_specific_param;
>  
>      dbd = req->cmd.buf[1]  & 0x8;
>      page = req->cmd.buf[2] & 0x3f;
> @@ -614,16 +615,31 @@ static int scsi_disk_emulate_mode_sense(SCSIRequest *req, uint8_t *outbuf)
>      memset(outbuf, 0, req->cmd.xfer);
>      p = outbuf;
>  
> -    p[1] = 0; /* Default media type.  */
> -    p[3] = 0; /* Block descriptor length.  */
>      if (bdrv_is_read_only(s->bs)) {
> -        p[2] = 0x80; /* Readonly.  */
> +        dev_specific_param = 0x80; /* Readonly.  */
> +    } else {
> +        dev_specific_param = 0x00;
> +    }
> +
> +    if (req->cmd.buf[0] == MODE_SENSE) {
> +        p[1] = 0; /* Default media type.  */
> +        p[2] = dev_specific_param;
> +        p[3] = 0; /* Block descriptor length.  */
> +        p += 4;
> +    } else { /* MODE_SENSE_10 */
> +        p[2] = 0; /* Default media type.  */
> +        p[3] = dev_specific_param;
> +        p[6] = p[7] = 0; /* Block descriptor length.  */
> +        p += 8;
>      }
> -    p += 4;
>  
>      bdrv_get_geometry(s->bs, &nb_sectors);
>      if ((~dbd) & nb_sectors) {
> -        outbuf[3] = 8; /* Block descriptor length  */
> +        if (req->cmd.buf[0] == MODE_SENSE) {
> +            outbuf[3] = 8; /* Block descriptor length  */
> +        } else { /* MODE_SENSE_10 */
> +            outbuf[7] = 8; /* Block descriptor length  */
> +        }
>          nb_sectors /= s->cluster_size;
>          nb_sectors--;
>          if (nb_sectors > 0xffffff)
> @@ -653,7 +669,12 @@ static int scsi_disk_emulate_mode_sense(SCSIRequest *req, uint8_t *outbuf)
>      }
>  
>      buflen = p - outbuf;
> -    outbuf[0] = buflen - 1;
> +    if (req->cmd.buf[0] == MODE_SENSE) {
> +        outbuf[0] = buflen - 1;
> +    } else { /* MODE_SENSE_10 */
> +        outbuf[0] = ((buflen - 1) >> 8) & 0xff;
> +        outbuf[1] = (buflen - 1) & 0xff;

Missed that last time, but it should be buflen - 2 here, right? The mode
data length field is two bytes here.

While we're at it, maybe adding a comment before the if wouldn't hurt
which explains why we're subtracting something at all.

Kevin

  reply	other threads:[~2010-08-31  9:47 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-31  9:22 [Qemu-devel] [PATCH v2 0/6] scsi-disk: improve the emulation of theMODE SENSE command Bernhard Kohl
2010-08-31  9:22 ` [Qemu-devel] [PATCH v2 1/6] scsi-disk: fix the mode data length field returned by the MODE " Bernhard Kohl
2010-08-31 10:26   ` [Qemu-devel] " Kevin Wolf
2010-08-31 10:52     ` Bernhard Kohl
2010-08-31  9:22 ` [Qemu-devel] [PATCH v2 2/6] scsi-disk: fix the mode data header returned by the MODE SENSE(10) command Bernhard Kohl
2010-08-31  9:47   ` Kevin Wolf [this message]
2010-08-31 10:24     ` [Qemu-devel] " Bernhard Kohl
2010-08-31  9:22 ` [Qemu-devel] [PATCH v2 3/6] scsi-disk: respect the page control (PC) field in the MODE SENSE command Bernhard Kohl
2010-08-31  9:22 ` [Qemu-devel] [PATCH v2 4/6] scsi-disk: fix the block descriptor returned by " Bernhard Kohl
2010-08-31  9:22 ` [Qemu-devel] [PATCH v2 5/6] scsi-disk: return CHECK CONDITION for unknown page codes in " Bernhard Kohl
2010-08-31  9:22 ` [Qemu-devel] [PATCH v2 6/6] scsi-disk: fix the check of the DBD bit " Bernhard Kohl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C7CCFBA.7050501@redhat.com \
    --to=kwolf@redhat.com \
    --cc=bernhard.kohl@nsn.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.