> > Looking at the code in scsa2usb_rw_transport(), I'd say this special case
> > isn't handled correctly, when translating from SCMD_READ/SCMD_WRITE to
> > SCMD_READ_G1/SCMD_WRITE_G1.
> > 
> > I think for a correct read/write(6) implementation, we need something
> > like this:
> > 
> >         switch (opcode) {
> >         case SCMD_READ:
> >                 /*
> >                  * Note that READ/WRITE(6) are not supported by the drive.
> >                  * convert it into a 10 byte read/write.
> >                  */
> >                 lba = SCSA2USB_LBA_6BYTE(pkt);
> >                 len = SCSA2USB_LEN_6BYTE(pkt);
> >                 if (len == 0) len = 256;             
<<<<<<<<<<<<<<<<<<<<<<<<<<
> >                 opcode = SCMD_READ_G1;  /* Overwrite it w/ byte 10 cmd val 
*/
> >                 dir = USB_EP_DIR_IN;
> >                 break;
> >         case SCMD_WRITE:
> >                 lba = SCSA2USB_LBA_6BYTE(pkt);
> >                 len = SCSA2USB_LEN_6BYTE(pkt);
> >                 if (len == 0) len = 256;             
<<<<<<<<<<<<<<<<<<<<<<<<<<
> >                 opcode = SCMD_WRITE_G1; /* Overwrite it w/ byte 10 cmd val 
*/
> >                 dir = USB_EP_DIR_OUT;
> >                 break;
> > 
> > 
> 
> You are right. But we haven't seen this problem so far. Perhaps sd never 
> sends a read/write(6) with zero length. So it may not be a real issue. 
> I'll check if we need to add this.


An user level application using USCSI ioctls could send them.


sd_send_scsi_RDWR() contains some code to send read/write(6).  
But it might be impossible to make it send a read/write(6) cdb
with 256 sectors.


Otherwise, sd seems to avoid this case because the maximum block
count for CDB_GROUP0 is set to 255, not 256:

static struct sd_cdbinfo sd_cdbtab[] = {
        { CDB_GROUP0, 0x00,        0x1FFFFF,   0xFF, <<<<<  },
        { CDB_GROUP1, SCMD_GROUP1, 0xFFFFFFFF, 0xFFFF,      },
        { CDB_GROUP5, SCMD_GROUP5, 0xFFFFFFFF, 0xFFFFFFFF,  },
        { CDB_GROUP4, SCMD_GROUP4, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFF, },
};



Reply via email to