[PATCH] SCSI: Prevent from retrying with expecting_cc_ua in case of disk change.

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

 



Hi James,

Thanks for your comment.
Actually, Rob and I are focusing to the same problem.
And I have a dvd drive of that kind.

To confirm ASC,ASCQ in this case, I added some printk
like this.
----
        * so that we can deal with it there.
        */
       if (scmd->device->expecting_cc_ua) {
               printk("scsi_check_sense: expecting_cc_ua=on"
                      " unit_attention asc=%02x ascq=%02x\n",
                      sshdr.asc, sshdr.ascq);
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               scmd->device->expecting_cc_ua = 0;
               return SCSI_MLQUEUE_DIS_DEV_RETRY;
       }
       /*
        * if the device is in the process of becoming ready, we
        * should retry.
        */
----
And I created boot dvd, booted the system with that in
rescue mode, changed the media after boot and read or write
that media, then, I could see these messages.
----
<6>Adding 4095992k swap on /dev/VolGroup00/LogVol01.  Priority:-1 extents:1 across:4095996k
<4>scsi_check_sense: expecting_cc_ua=on unit_attention asc=28 ascq=00
<4>end_request: I/O error, dev sr0, sector 7432832
----

As message says, my dvd drive reports media change sense and
as the result end_request I/O error is caused.
Surely this drive may be naughty, but we should know what kind of
UA and treat it.


---
 drivers/scsi/scsi_error.c |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index a4b9cdb..158ba46 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -293,8 +293,15 @@ static int scsi_check_sense(struct scsi_cmnd *scmd)
                 * so that we can deal with it there.
                 */
                if (scmd->device->expecting_cc_ua) {
-                       scmd->device->expecting_cc_ua = 0;
-                       return NEEDS_RETRY;
+               /*
+                * Because some device does not queue unit attentions correctly,
+                * we carefully check additional sense code and qualifier
+                * so as not to squash media change unit attention.
+                */
+                       if (sshdr.asc != 0x28 || sshdr.ascq != 0x00) {
+                               scmd->device->expecting_cc_ua = 0;
+                               return NEEDS_RETRY;
+                       }
                }
                /*
                 * if the device is in the process of becoming ready, we
--
1.6.5

(2011/08/10 0:22), James Bottomley wrote:
> On Tue, 2011-08-09 at 07:50 +0900, TARUISI Hiroaki wrote:
>> Hi James,
>>
>> I posted a patch (as below) last year about this.
>>   http://www.kerneltrap.org/mailarchive/linux-scsi/2010/12/22/6887895
>>
>> I intended to distinguish UA caused by media change from UA caused by
>> other reasons like resetting a device. First, it should be notified to upper
>> layer driver, sr, but the other must be retried as scsi_error.c coded.
>>
>> At least SCSI driver should not squash all UAs, I think.
> 
> Well ... the spec says the device should stack UAs in this event.
> However, I can totally believe that a broken CD would fail on this
> front.
> 
> If Mike and Rob can verify that it's realy asc/ascq 0x28/0x0 that the CD
> is emitting, I'd be happy to put the patch in (with a nice big comment
> explaining what's being done and why over the if() check rather than
> updating the global comment).
> 
> James
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
> 
-- 
taruisi

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux