All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.de>
To: Markus Armbruster <armbru@redhat.com>
Cc: kwolf@redhat.com, quintela@redhat.com,
	stefano.stabellini@eu.citrix.com, qemu-devel@nongnu.org,
	lcapitulino@redhat.com, amit.shah@redhat.com, hch@lst.de
Subject: Re: [Qemu-devel] [PATCH v2 23/45] scsi-disk: Fix START_STOP to fail when it can't eject
Date: Thu, 04 Aug 2011 08:20:21 +0200	[thread overview]
Message-ID: <4E3A3A25.7040006@suse.de> (raw)
In-Reply-To: <1312376904-16115-24-git-send-email-armbru@redhat.com>

On 08/03/2011 03:08 PM, Markus Armbruster wrote:
> Don't fail when tray is already open.
>
> Signed-off-by: Markus Armbruster<armbru@redhat.com>
> ---
>   hw/scsi-bus.c  |   10 ++++++++++
>   hw/scsi-disk.c |   15 +++++++++++----
>   hw/scsi.h      |    4 ++++
>   3 files changed, 25 insertions(+), 4 deletions(-)
>
> diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c
> index 0b0344c..1c5fe7f 100644
> --- a/hw/scsi-bus.c
> +++ b/hw/scsi-bus.c
> @@ -441,6 +441,11 @@ const struct SCSISense sense_code_NO_MEDIUM = {
>       .key = NOT_READY, .asc = 0x3a, .ascq = 0x00
>   };
>
> +/* LUN not ready, medium removal prevented */
> +const struct SCSISense sense_code_MEDIUM_REMOVAL_PREVENTED_NR = {
> +    .key = NOT_READY, .asc = 0x53, .ascq = 0x00
> +};
> +
I would prefer to have the naming reversed,
eg NOT_READY_REMOVAL_PREVENTED
>   /* Hardware error, internal target failure */
>   const struct SCSISense sense_code_TARGET_FAILURE = {
>       .key = HARDWARE_ERROR, .asc = 0x44, .ascq = 0x00
> @@ -466,6 +471,11 @@ const struct SCSISense sense_code_LUN_NOT_SUPPORTED = {
>       .key = ILLEGAL_REQUEST, .asc = 0x25, .ascq = 0x00
>   };
>
> +/* Illegal request, medium removal prevented */
> +const struct SCSISense sense_code_MEDIUM_REMOVAL_PREVENTED_ILL = {
> +    .key = ILLEGAL_REQUEST, .asc = 0x53, .ascq = 0x00
> +};
> +
Same here: ILLEGAL_REQ_REMOVAL_PREVENTED

>   /* Command aborted, I/O process terminated */
>   const struct SCSISense sense_code_IO_ERROR = {
>       .key = ABORTED_COMMAND, .asc = 0x00, .ascq = 0x06
> diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
> index 79d7737..19a1843 100644
> --- a/hw/scsi-disk.c
> +++ b/hw/scsi-disk.c
> @@ -828,7 +828,7 @@ static int scsi_disk_emulate_read_toc(SCSIRequest *req, uint8_t *outbuf)
>       return toclen;
>   }
>
> -static void scsi_disk_emulate_start_stop(SCSIDiskReq *r)
> +static int scsi_disk_emulate_start_stop(SCSIDiskReq *r)
>   {
>       SCSIRequest *req =&r->req;
>       SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, req->dev);
> @@ -836,12 +836,17 @@ static void scsi_disk_emulate_start_stop(SCSIDiskReq *r)
>       bool loej = req->cmd.buf[4]&  2;
>
>       if (s->qdev.type == TYPE_ROM&&  loej) {
> -        if (!start&&  s->tray_locked) {
> -            return;
> +        if (!start&&  !s->tray_open&&  s->tray_locked) {
> +            scsi_command_complete(r, CHECK_CONDITION,
> +                                  bdrv_is_inserted(s->bs)
> +                                  ? SENSE_CODE(MEDIUM_REMOVAL_PREVENTED_ILL)
> +                                  : SENSE_CODE(MEDIUM_REMOVAL_PREVENTED_NR));
> +            return -1;
>           }
>           bdrv_eject(s->bs, !start);
>           s->tray_open = !start;
>       }
> +    return 0;
>   }
>
>   static int scsi_disk_emulate_command(SCSIDiskReq *r, uint8_t *outbuf)
> @@ -897,7 +902,9 @@ static int scsi_disk_emulate_command(SCSIDiskReq *r, uint8_t *outbuf)
>               goto illegal_request;
>           break;
>       case START_STOP:
> -        scsi_disk_emulate_start_stop(r);
> +        if (scsi_disk_emulate_start_stop(r)<  0) {
> +            return -1;
> +        }
>           break;
>       case ALLOW_MEDIUM_REMOVAL:
>           s->tray_locked = req->cmd.buf[4]&  1;
> diff --git a/hw/scsi.h b/hw/scsi.h
> index 6b15bbc..63442c6 100644
> --- a/hw/scsi.h
> +++ b/hw/scsi.h
> @@ -118,6 +118,8 @@ extern const struct SCSISense sense_code_NO_SENSE;
>   extern const struct SCSISense sense_code_LUN_NOT_READY;
>   /* LUN not ready, Medium not present */
>   extern const struct SCSISense sense_code_NO_MEDIUM;
> +/* LUN not readt, medium removal prevented */
> +extern const struct SCSISense sense_code_MEDIUM_REMOVAL_PREVENTED_NR;
LUN not ready.
Naming see above.

>   /* Hardware error, internal target failure */
>   extern const struct SCSISense sense_code_TARGET_FAILURE;
>   /* Illegal request, invalid command operation code */
> @@ -128,6 +130,8 @@ extern const struct SCSISense sense_code_LBA_OUT_OF_RANGE;
>   extern const struct SCSISense sense_code_INVALID_FIELD;
>   /* Illegal request, LUN not supported */
>   extern const struct SCSISense sense_code_LUN_NOT_SUPPORTED;
> +/* Illegal request, medium removal prevented */
> +extern const struct SCSISense sense_code_MEDIUM_REMOVAL_PREVENTED_ILL;
See above.
>   /* Command aborted, I/O process terminated */
>   extern const struct SCSISense sense_code_IO_ERROR;
>   /* Command aborted, I_T Nexus loss occurred */

Other than that it's okay.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare@suse.de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)

  reply	other threads:[~2011-08-04  6:20 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-03 13:07 [Qemu-devel] [PATCH v2 00/45] Block layer cleanup & fixes Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 01/45] block: Attach non-qdev devices as well Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 02/45] block: Generalize change_cb() to BlockDevOps Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 03/45] block: Split change_cb() into change_media_cb(), resize_cb() Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 04/45] ide: Update command code definitions as per ACS-2 Table B.2 Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 05/45] ide: Clean up case label indentation in ide_exec_cmd() Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 06/45] ide: Fix ATA command READ to set ATAPI signature for CD-ROM Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 07/45] ide: Use a table to declare which drive kinds accept each command Markus Armbruster
2011-08-03 16:53   ` Blue Swirl
2011-08-03 17:15     ` Markus Armbruster
2011-09-02 10:08     ` Kevin Wolf
2011-09-02 14:43       ` Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 08/45] ide: Reject ATA commands specific to drive kinds Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 09/45] ide/atapi: Clean up misleading name in cmd_start_stop_unit() Markus Armbruster
2011-09-02 10:20   ` Kevin Wolf
2011-09-02 14:47     ` Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 10/45] ide/atapi: Track tray open/close state Markus Armbruster
2011-09-02 10:23   ` Kevin Wolf
2011-09-02 14:51     ` Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 11/45] scsi-disk: Factor out scsi_disk_emulate_start_stop() Markus Armbruster
2011-08-04  6:12   ` Hannes Reinecke
2011-09-02 10:26   ` Kevin Wolf
2011-09-02 14:55     ` Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 12/45] scsi-disk: Track tray open/close state Markus Armbruster
2011-08-04  6:13   ` Hannes Reinecke
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 13/45] block: Revert entanglement of bdrv_is_inserted() with tray status Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 14/45] block: Drop tray status tracking, no longer used Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 15/45] ide/atapi: Track tray locked state Markus Armbruster
2011-09-02 11:02   ` Kevin Wolf
2011-09-02 14:56     ` Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 16/45] scsi-disk: " Markus Armbruster
2011-08-04  6:14   ` Hannes Reinecke
2011-08-04  6:39     ` Markus Armbruster
2011-08-04  6:46       ` Hannes Reinecke
2011-08-04  7:25         ` Markus Armbruster
2011-08-04  7:30           ` Hannes Reinecke
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 17/45] block: Leave enforcing tray lock to device models Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 18/45] block: Drop medium lock tracking, ask device models instead Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 19/45] block: Rename bdrv_set_locked() to bdrv_lock_medium() Markus Armbruster
2011-09-02 11:30   ` Kevin Wolf
2011-09-02 14:58     ` Markus Armbruster
2011-08-03 13:07 ` [Qemu-devel] [PATCH v2 20/45] ide: Provide IDEDeviceInfo method exit() Markus Armbruster
2011-08-04 17:48   ` Luiz Capitulino
2011-08-05  7:13     ` Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 21/45] ide/atapi: Don't fail eject when tray is already open Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 22/45] ide/atapi: Avoid physical/virtual tray state mismatch Markus Armbruster
2011-09-02 12:07   ` Kevin Wolf
2011-09-02 15:19     ` Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 23/45] scsi-disk: Fix START_STOP to fail when it can't eject Markus Armbruster
2011-08-04  6:20   ` Hannes Reinecke [this message]
2011-08-04  6:48     ` Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 24/45] scsi-disk: Avoid physical/virtual tray state mismatch Markus Armbruster
2011-08-04  6:21   ` Hannes Reinecke
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 25/45] ide: Give vmstate structs internal linkage where possible Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 26/45] ide/atapi: Preserve tray state on migration Markus Armbruster
2011-09-02 12:20   ` Kevin Wolf
2011-09-02 12:35     ` Paolo Bonzini
2011-09-02 15:22       ` Markus Armbruster
2011-09-02 15:25         ` Paolo Bonzini
2011-09-02 15:20     ` Markus Armbruster
2011-09-02 15:59       ` Kevin Wolf
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 27/45] scsi-disk: " Markus Armbruster
2011-08-04  6:23   ` Hannes Reinecke
2011-08-04  6:45     ` Paolo Bonzini
2011-08-04  9:57     ` Kevin Wolf
2011-09-02 12:25   ` Kevin Wolf
2011-09-02 15:35     ` Markus Armbruster
2011-09-02 16:18       ` Kevin Wolf
2011-09-02 16:45         ` Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 28/45] block/raw: Fix to forward method bdrv_media_changed() Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 29/45] block: Leave tracking media change to device models Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 30/45] fdc: Make media change detection more robust Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 31/45] block: Clean up bdrv_flush_all() Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 32/45] savevm: Include writable devices with removable media Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 33/45] xen: Clean up pci_piix3_xen_ide_unplug()'s test for "not a CD" Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 34/45] spitz tosa: Simplify "drive is suitable for microdrive" test Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 35/45] block: Clean up remaining users of "removable" Markus Armbruster
2011-08-04 17:58   ` Luiz Capitulino
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 36/45] block: Drop BlockDriverState member removable Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 37/45] block: Show whether the guest ejected the medium in info block Markus Armbruster
2011-08-04 18:05   ` Luiz Capitulino
2011-09-02 13:04   ` Kevin Wolf
2011-09-02 15:29     ` Markus Armbruster
2011-09-02 16:22       ` Kevin Wolf
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 38/45] block: Move BlockConf & friends from block_int.h to block.h Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 39/45] hw: Trim superfluous #include "block_int.h" Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 40/45] block: Declare qemu_blockalign() in block.h, not block_int.h Markus Armbruster
2011-08-04 18:10   ` Luiz Capitulino
2011-08-04 18:22     ` Markus Armbruster
2011-08-04 18:28       ` Luiz Capitulino
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 41/45] block: New bdrv_set_buffer_alignment() Markus Armbruster
2011-09-02 13:13   ` Kevin Wolf
2011-09-02 15:30     ` Markus Armbruster
2011-09-02 16:25       ` Kevin Wolf
2011-09-02 16:53         ` Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 42/45] block: Reset buffer alignment on detach Markus Armbruster
2011-09-02 13:20   ` Kevin Wolf
2011-09-02 15:32     ` Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 43/45] nbd: Clean up use of block_int.h Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 44/45] block: New change_media_cb() parameter load Markus Armbruster
2011-09-02 13:26   ` Kevin Wolf
2011-09-02 15:33     ` Markus Armbruster
2011-08-03 13:08 ` [Qemu-devel] [PATCH v2 45/45] ide/atapi scsi-disk: Make monitor eject -f, then change work Markus Armbruster
2011-08-04 15:54 ` [Qemu-devel] [PATCH v2 00/45] Block layer cleanup & fixes Avi Kivity
2011-09-02 13:37 ` Kevin Wolf

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=4E3A3A25.7040006@suse.de \
    --to=hare@suse.de \
    --cc=amit.shah@redhat.com \
    --cc=armbru@redhat.com \
    --cc=hch@lst.de \
    --cc=kwolf@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=stefano.stabellini@eu.citrix.com \
    /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.