* [PATCH 2.4] rewritable USB DVD-RAM vs. mode sense op choice
@ 2004-08-16 16:29 Pat LaVarre
2004-08-23 15:48 ` Jens Axboe
0 siblings, 1 reply; 6+ messages in thread
From: Pat LaVarre @ 2004-08-16 16:29 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-scsi
Jens A:
2.4.26 and 2.4.27 strace of dd of=, mount -w, etc. chokes via EROFS for
USB DVD-RAM. 2.4.25 I have not tried.
This small patch substitutes the MMC op x5A "MODE SENSE (10)" for the op
x1A that in t10.org PDT x05 is vendor-specific. Such consideration
persuades a standard DVD-RAM drive to admit it rewrites DVD-RAM discs.
Revising the CDB alone of course does not suffice: we also have to step
past a different size of data in header.
Pat LaVarre
diff -urp linux-2.4.27/drivers/scsi/sr.c linux-2.4.27-pel/drivers/scsi/sr.c
--- linux-2.4.27/drivers/scsi/sr.c 2003-06-13 08:51:36.000000000 -0600
+++ linux-2.4.27-pel/drivers/scsi/sr.c 2004-08-16 10:08:37.000000000 -0600
@@ -691,7 +691,7 @@ void get_sectorsize(int i)
void get_capabilities(int i)
{
- unsigned char cmd[6];
+ unsigned char cmd[16];
unsigned char *buffer;
int rc, n;
@@ -713,12 +713,12 @@ void get_capabilities(int i)
printk(KERN_ERR "sr: out of memory.\n");
return;
}
- cmd[0] = MODE_SENSE;
+ memset(cmd, '\0', sizeof cmd);
+ cmd[0] = MODE_SENSE_10;
cmd[1] = (scsi_CDs[i].device->scsi_level <= SCSI_2) ?
((scsi_CDs[i].device->lun << 5) & 0xe0) : 0;
cmd[2] = 0x2a;
- cmd[4] = 128;
- cmd[3] = cmd[5] = 0;
+ cmd[8] = 128;
rc = sr_do_ioctl(i, cmd, buffer, 128, 1, SCSI_DATA_READ, NULL);
if (rc) {
@@ -731,7 +731,7 @@ void get_capabilities(int i)
printk("sr%i: scsi-1 drive\n", i);
return;
}
- n = buffer[3] + 4;
+ n = 8 + ((buffer[6] << 8) | buffer[7]); /* 8 = sizeof MODE_SENSE_10 header */
scsi_CDs[i].cdi.speed = ((buffer[n + 8] << 8) + buffer[n + 9]) / 176;
scsi_CDs[i].readcd_known = 1;
scsi_CDs[i].readcd_cdda = buffer[n + 5] & 0x01;
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH 2.4] rewritable USB DVD-RAM vs. mode sense op choice 2004-08-16 16:29 [PATCH 2.4] rewritable USB DVD-RAM vs. mode sense op choice Pat LaVarre @ 2004-08-23 15:48 ` Jens Axboe 2004-08-23 16:46 ` Pat LaVarre 0 siblings, 1 reply; 6+ messages in thread From: Jens Axboe @ 2004-08-23 15:48 UTC (permalink / raw) To: Pat LaVarre; +Cc: linux-scsi On Mon, Aug 16 2004, Pat LaVarre wrote: > Jens A: > > 2.4.26 and 2.4.27 strace of dd of=, mount -w, etc. chokes via EROFS for > USB DVD-RAM. 2.4.25 I have not tried. > > This small patch substitutes the MMC op x5A "MODE SENSE (10)" for the op > x1A that in t10.org PDT x05 is vendor-specific. Such consideration > persuades a standard DVD-RAM drive to admit it rewrites DVD-RAM discs. > > Revising the CDB alone of course does not suffice: we also have to step > past a different size of data in header. > > Pat LaVarre > > diff -urp linux-2.4.27/drivers/scsi/sr.c linux-2.4.27-pel/drivers/scsi/sr.c > --- linux-2.4.27/drivers/scsi/sr.c 2003-06-13 08:51:36.000000000 -0600 > +++ linux-2.4.27-pel/drivers/scsi/sr.c 2004-08-16 10:08:37.000000000 -0600 > @@ -691,7 +691,7 @@ void get_sectorsize(int i) > > void get_capabilities(int i) > { > - unsigned char cmd[6]; > + unsigned char cmd[16]; > unsigned char *buffer; > int rc, n; > > @@ -713,12 +713,12 @@ void get_capabilities(int i) > printk(KERN_ERR "sr: out of memory.\n"); > return; > } > - cmd[0] = MODE_SENSE; > + memset(cmd, '\0', sizeof cmd); memset(cmd, 0, sizeof(cmd)); > + cmd[0] = MODE_SENSE_10; > cmd[1] = (scsi_CDs[i].device->scsi_level <= SCSI_2) ? > ((scsi_CDs[i].device->lun << 5) & 0xe0) : 0; > cmd[2] = 0x2a; > - cmd[4] = 128; > - cmd[3] = cmd[5] = 0; > + cmd[8] = 128; > rc = sr_do_ioctl(i, cmd, buffer, 128, 1, SCSI_DATA_READ, NULL); This gives me a bad vibe - I'm assuming your device is failing the 6-byte mode sense? This has to work with devices that don't support MODE_SENSE_10, if you want it to work for you as well, then make the MODE_SENSE_10 a fall back when MODE_SENSE fails. You cannot rely on the change you made. -- Jens Axboe ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2.4] rewritable USB DVD-RAM vs. mode sense op choice 2004-08-23 15:48 ` Jens Axboe @ 2004-08-23 16:46 ` Pat LaVarre 2004-08-23 17:12 ` Jens Axboe 0 siblings, 1 reply; 6+ messages in thread From: Pat LaVarre @ 2004-08-23 16:46 UTC (permalink / raw) To: Jens Axboe; +Cc: linux-scsi Jens A: >> - cmd[0] = MODE_SENSE; >> + memset(cmd, '\0', sizeof cmd); > > memset(cmd, 0, sizeof(cmd)); > >> + cmd[0] = MODE_SENSE_10; >> cmd[1] = (scsi_CDs[i].device->scsi_level <= SCSI_2) ? >> ((scsi_CDs[i].device->lun << 5) & 0xe0) : 0; >> cmd[2] = 0x2a; >> - cmd[4] = 128; >> - cmd[3] = cmd[5] = 0; >> + cmd[8] = 128; >> rc = sr_do_ioctl(i, cmd, buffer, 128, 1, SCSI_DATA_READ, NULL); > > This gives me a bad vibe - I'm assuming your device is failing the > 6-byte mode sense? This has to work with devices that don't support > MODE_SENSE_10, Clear design goal, thank you. > if you want it to work for you as well, then make the > MODE_SENSE_10 a fall back when MODE_SENSE fails. You cannot rely on the > change you made. Clear instruction, thank you, I will do. > the MODE_SENSE_10 a fall back when MODE_SENSE fails I believe the specs on the web instead tell us to try MODE_SENSE_10 first and then fall back to MODE_SENSE. I hear you requesting the reverse, I will deliver what I hear you request. > your device is failing ... ? Help, I have more than one device. My Iomega REV drive works here because that device accepts both ops, implementing the SFF/ ANSI MMC specification for op x5A and the incompatible ANSI SPC specification for op x1A. To achieve compatibility, I believe every host should try both ops and every device should accept both ops. I mean only to say that I see Linux 2.4 sr_mod mischaracterises the many DVD/ CD devices that do reject op x1A while accepting only op x5A MODE_SENSE_10. I hesitate to accept the Linux name MODE_SENSE for the op x1A, because I do not find that claim well-founded in the web for PDT x05 = DVD/ CD = MMC. I remember Mt Fuji in particular neglects to name op x1A. > your device is failing ... ? In this thread I meant to share the example of 2.4 sr_mod mischaracterising a USB DVD-RAM drive that rejects op x1A. I hear of PATAPI DVD/CD devices that reject op x1A also. I imagine ide-cd works only by trying op x5A, and not just x1A. Want me to check? I don't yet know how to trace in Linux the plain hex of the CDB's that ide-cd sends. Pat LaVarre ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2.4] rewritable USB DVD-RAM vs. mode sense op choice 2004-08-23 16:46 ` Pat LaVarre @ 2004-08-23 17:12 ` Jens Axboe 2004-08-23 17:24 ` Pat LaVarre 2004-08-23 22:45 ` Pat LaVarre 0 siblings, 2 replies; 6+ messages in thread From: Jens Axboe @ 2004-08-23 17:12 UTC (permalink / raw) To: Pat LaVarre; +Cc: linux-scsi On Mon, Aug 23 2004, Pat LaVarre wrote: > >the MODE_SENSE_10 a fall back when MODE_SENSE fails > > I believe the specs on the web instead tell us to try MODE_SENSE_10 > first and then fall back to MODE_SENSE. I hear you requesting the > reverse, I will deliver what I hear you request. That's what I would do as well, actually. But since this is 2.4 it's safe to keep old behaviour and only try something new if that fails. > >your device is failing ... ? > > Help, I have more than one device. Doesn't matter > My Iomega REV drive works here because that device accepts both ops, > implementing the SFF/ ANSI MMC specification for op x5A and the > incompatible ANSI SPC specification for op x1A. To achieve > compatibility, I believe every host should try both ops and every > device should accept both ops. > > I mean only to say that I see Linux 2.4 sr_mod mischaracterises the > many DVD/ CD devices that do reject op x1A while accepting only op x5A > MODE_SENSE_10. > > I hesitate to accept the Linux name MODE_SENSE for the op x1A, because > I do not find that claim well-founded in the web for PDT x05 = DVD/ CD > = MMC. I remember Mt Fuji in particular neglects to name op x1A. That's the classical naming, since the 6-byte variant was the original (and surely people would have found it stupid to name it MODE_SENSE_6 back then). So experience usually tell people that when you see READ and READ_10, the former is the old 6-byte variant. Mt Fuji doesn't name any of the 6-byte variants, since they are long deprecated for that class of devices. > >your device is failing ... ? > > In this thread I meant to share the example of 2.4 sr_mod > mischaracterising a USB DVD-RAM drive that rejects op x1A. > > I hear of PATAPI DVD/CD devices that reject op x1A also. I imagine > ide-cd works only by trying op x5A, and not just x1A. Want me to > check? I don't yet know how to trace in Linux the plain hex of the > CDB's that ide-cd sends. Only sr issues 6-byte commands, I don't think support for them was ever required for ATAPI devices. So if you add a fallback to issue MODE_SENSE_10 when _6 fails, you should be golden. -- Jens Axboe ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2.4] rewritable USB DVD-RAM vs. mode sense op choice 2004-08-23 17:12 ` Jens Axboe @ 2004-08-23 17:24 ` Pat LaVarre 2004-08-23 22:45 ` Pat LaVarre 1 sibling, 0 replies; 6+ messages in thread From: Pat LaVarre @ 2004-08-23 17:24 UTC (permalink / raw) To: Jens Axboe; +Cc: linux-scsi Jens A: >> I believe the specs on the web instead tell us to try MODE_SENSE_10 >> first and then fall back to MODE_SENSE. I hear you requesting the >> reverse, I will deliver what I hear you request. > > That's what I would do as well, actually. But since this is 2.4 it's > safe to keep old behaviour and only try something new if that fails. Clear design goal, thank you. > Only sr issues 6-byte commands, I don't think support for them was ever > required for ATAPI devices. > > So if you add a USB > fallback to issue MODE_SENSE_10 when _6 fails, you > should be golden. Clear instruction, will do, thank you. Ack, ack, ack, we're in sync now, thank you! Pat LaVarre ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2.4] rewritable USB DVD-RAM vs. mode sense op choice 2004-08-23 17:12 ` Jens Axboe 2004-08-23 17:24 ` Pat LaVarre @ 2004-08-23 22:45 ` Pat LaVarre 1 sibling, 0 replies; 6+ messages in thread From: Pat LaVarre @ 2004-08-23 22:45 UTC (permalink / raw) To: Jens Axboe; +Cc: linux-scsi, Paul Smith > add a fallback to issue MODE_SENSE_10 when _6 fails, ... > should be golden. Jens A: This 2.4 patch, as you suggested, makes sr_mod try op x5A MODE_SENSE_10 if op x1A MODE_SENSE fails in any way. As you know, the 2.4.27 sr_mod without this patch complains "scsi-1 drive", rather than discovering "scsi3-mmc drive: ... dvd-ram ...", if plugged into a USB DVD-RAM drive that implements only SFF/ MMC x5A and not SPC x1A. Do you like this patch? Want people to run any tests in particular? Already, with rewritable DVD-RAM discs, in dd of= rewritability and USB CDB traces, I see this makes the USB DVD-RAM "HL-DT-ST" "DVDRAM" "A100" rewritable and has no effect on the USB DVD-RAM "MATSHITA" "DVD-RAM" "A111". Pat LaVarre --- linux-2.4.27/drivers/scsi/sr.c 2003-06-13 08:51:36.000000000 -0600 +++ linux-2.4.27-pel/drivers/scsi/sr.c 2004-08-23 14:07:49.000000000 -0600 @@ -689,9 +689,42 @@ void get_sectorsize(int i) scsi_free(buffer, 512); } -void get_capabilities(int i) +static int sr_mode_sense_10(int * n, + int i, unsigned char * buffer, unsigned buflength, + int quiet, int readwrite, struct request_sense * sense) +{ + unsigned char cmd[16]; + int rc; + memset(cmd, '\0', sizeof cmd); + cmd[0] = MODE_SENSE_10; + cmd[1] = (scsi_CDs[i].device->scsi_level <= SCSI_2) ? + ((scsi_CDs[i].device->lun << 5) & 0xe0) : 0; + cmd[2] = 0x2a; + cmd[8] = 128; + rc = sr_do_ioctl(i, cmd, buffer, buflength, quiet, readwrite, sense); + *n = 8 + ((buffer[6] << 8) | buffer[7]); + return rc; +} + +static int sr_mode_sense_6(int * n, + int i, unsigned char * buffer, unsigned buflength, + int quiet, int readwrite, struct request_sense * sense) { unsigned char cmd[6]; + int rc; + cmd[0] = MODE_SENSE; + cmd[1] = (scsi_CDs[i].device->scsi_level <= SCSI_2) ? + ((scsi_CDs[i].device->lun << 5) & 0xe0) : 0; + cmd[2] = 0x2a; + cmd[4] = 128; + cmd[3] = cmd[5] = 0; + rc = sr_do_ioctl(i, cmd, buffer, buflength, quiet, readwrite, sense); + *n = buffer[3] + 4; + return rc; +} + +void get_capabilities(int i) +{ unsigned char *buffer; int rc, n; @@ -713,13 +746,18 @@ void get_capabilities(int i) printk(KERN_ERR "sr: out of memory.\n"); return; } - cmd[0] = MODE_SENSE; - cmd[1] = (scsi_CDs[i].device->scsi_level <= SCSI_2) ? - ((scsi_CDs[i].device->lun << 5) & 0xe0) : 0; - cmd[2] = 0x2a; - cmd[4] = 128; - cmd[3] = cmd[5] = 0; - rc = sr_do_ioctl(i, cmd, buffer, 128, 1, SCSI_DATA_READ, NULL); + + /* SFF/ MMC op x5A MODE_SENSE_10 should work, + * and SPC op x1A MODE_SENSE might work, + * so we try both except we try x1A first to match Linux 2.4.27. + */ + + rc = sr_mode_sense_6(&n, + i, buffer, 128, 1, SCSI_DATA_READ, NULL); + if (rc) { + rc = sr_mode_sense_10(&n, + i, buffer, 128, 1, SCSI_DATA_READ, NULL); + } if (rc) { /* failed, drive doesn't have capabilities mode page */ @@ -731,7 +769,6 @@ void get_capabilities(int i) printk("sr%i: scsi-1 drive\n", i); return; } - n = buffer[3] + 4; scsi_CDs[i].cdi.speed = ((buffer[n + 8] << 8) + buffer[n + 9]) / 176; scsi_CDs[i].readcd_known = 1; scsi_CDs[i].readcd_cdda = buffer[n + 5] & 0x01; ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2004-08-23 22:46 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-08-16 16:29 [PATCH 2.4] rewritable USB DVD-RAM vs. mode sense op choice Pat LaVarre 2004-08-23 15:48 ` Jens Axboe 2004-08-23 16:46 ` Pat LaVarre 2004-08-23 17:12 ` Jens Axboe 2004-08-23 17:24 ` Pat LaVarre 2004-08-23 22:45 ` Pat LaVarre
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).