lkml.org 
[lkml]   [2010]   [Dec]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/8] scsi: fix TUR error handling in sr_media_change()
    Date
    sr_test_unit_ready() returns 0 iff TUR succeeded - IOW, when media is
    present and the device is actually ready, so the return value wouldn't
    be zero when TUR ends with sense data. sr_media_change() incorrectly
    tests (retval || (scsi_sense_valid(sshdr)...)) when it tries to test
    whether TUR failed without sense data or with sense data indicating
    media-not-present.

    Fix the test using scsi_status_is_good() and update comments.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    ---
    drivers/scsi/sr.c | 18 +++++++++++-------
    1 files changed, 11 insertions(+), 7 deletions(-)

    diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
    index d7b383c..deb24f0 100644
    --- a/drivers/scsi/sr.c
    +++ b/drivers/scsi/sr.c
    @@ -214,13 +214,17 @@ static int sr_media_change(struct cdrom_device_info *cdi, int slot)

    sshdr = kzalloc(sizeof(*sshdr), GFP_KERNEL);
    retval = sr_test_unit_ready(cd->device, sshdr);
    - if (retval || (scsi_sense_valid(sshdr) &&
    - /* 0x3a is medium not present */
    - sshdr->asc == 0x3a)) {
    - /* Media not present or unable to test, unit probably not
    - * ready. This usually means there is no disc in the drive.
    - * Mark as changed, and we will figure it out later once
    - * the drive is available again.
    + /*
    + * Media is considered to be present if TUR succeeds or fails with
    + * sense data indicating something other than media-not-present
    + * (ASC 0x3a).
    + */
    + if (!scsi_status_is_good(retval) &&
    + (!scsi_sense_valid(sshdr) || sshdr->asc == 0x3a)) {
    + /*
    + * Probably not media in the device. Mark as changed, and
    + * we will figure it out later once the drive is available
    + * again.
    */
    cd->device->changed = 1;
    /* This will force a flush, if called from check_disk_change */
    --
    1.7.1


    \
     
     \ /
      Last update: 2010-12-08 21:01    [W:0.022 / U:214.808 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site