Re: pktcdvd DVD+RW always writes at max drive speed (not media speed)

From: Peter Osterlund
Date: Sat Feb 25 2006 - 17:41:17 EST


linuxer@xxxxxxxxxxxx writes:

> petero@xxxxxxxxxxxxxx writes:
> >
> > linuxer@xxxxxxxxxxxx writes:
> >
> > > Peter Osterlund <petero2@xxxxxxxxx> writes:
> > > >
> > > > linuxer@xxxxxxxxxxxx writes:
> > > >
> > > > > In drivers/block/pktcdvd.c it appears that in the case of DVD
> > > > > rewriting, pkt_open_write always sets the write speed to pkt_get_max_speed
> > > > > (the maximum writing speed reported by the drive).
> > > > >
> > > > > In my case, I have a new drive capable of 8x re-writing. However, all of
> > > > > my existing media is rated for only 4x rewrite speed.
> > > > >
> > > > > When attempting to rw mount these disks, pktcdvd reports:
> > > > >
> > > > > Feb 18 00:09:52 ever kernel: pktcdvd: write speed 11080kB/s
> > > > > Feb 18 00:09:54 ever kernel: pktcdvd: 54 01 00 00 00 00 00 00 00 00 00 00 -
> > > > > sense 00.54.9c (No sense)
> > > > > Feb 18 00:09:54 ever kernel: pktcdvd: pktcdvd0 Optimum Power Calibration failed
> > > > >
> > > > > And then of course a huge heap of I/O errors on the disk.
> > > >
> > > > Have you verified that this is caused by the speed setting, ie does it
> > > > work correctly if you hack the driver to write at 4x speed?
> > >
> > > Correct. Adding a hard-coded manual setting of write_speed = 5540 to
> > > pkt_open_write results in functional operation (at least with 4x rated
> > > DVD+RW media).
> >
> > Does this patch work for you?
> >
> >
> > pktcdvd: Don't try to write faster than the DVD media speed allows.
> >
> > In theory the drive firmware should limit the speed to the fastest
> > allowed by the currently loaded media, but it doesn't always work in
> > practice.
...
> Unfortunately, no. It -should- work, but the extra DPRINTK's tell a further
> story of the drives stupidity.
>
> Upon running
> % pktsetup 0 /dev/hde ; mkudffs /dev/pktcdvd/0'
> I get the following output:
>
> Feb 24 19:30:31 ever kernel: pktcdvd: inserted media is DVD+RW
> Feb 24 19:30:31 ever kernel: pktcdvd: Max drive write speed 11080kB/s
> Feb 24 19:30:31 ever kernel: pktcdvd: Max. media speed: 5540kB/s
> Feb 24 19:30:31 ever kernel: pktcdvd: write speed 5540kB/s
> Feb 24 19:30:48 ever kernel: pktcdvd: 4590208kB available on disc
>
> All seems well and good. However, upon then issuing
> % mount /dev/pktcdvd/0 /mnt/dvdrw -t auto -o noatime,rw
>
> Feb 24 19:31:28 ever kernel: pktcdvd: inserted media is DVD+RW
> Feb 24 19:31:28 ever kernel: pktcdvd: Max drive write speed 11080kB/s
> Feb 24 19:31:28 ever kernel: pktcdvd: Max. media speed: 11080kB/s
> Feb 24 19:31:28 ever kernel: pktcdvd: write speed 11080kB/s
> Feb 24 19:31:30 ever kernel: pktcdvd: 54 01 00 00 00 00 00 00 00 00 00 00 - sense 00.54.1c (No sense)
> Feb 24 19:31:30 ever kernel: pktcdvd: pktcdvd0 Optimum Power Calibration failed
> Feb 24 19:31:30 ever kernel: pktcdvd: 4590208kB available on disc
> Feb 24 19:31:31 ever kernel: UDF-fs INFO UDF 0.9.8.1 (2004/29/09) Mounting volume 'LinuxUDF', timestamp 2006/02/24 18:30 (1ed4)
> Feb 24 19:31:40 ever kernel: hde: media error (bad sector): status=0x51 { DriveReady SeekComplete Error }
> Feb 24 19:31:40 ever kernel: hde: media error (bad sector): error=0x34 { AbortedCommand LastFailedSense=0x03 }
> Feb 24 19:31:40 ever kernel: ide: failed opcode was: unknown
> Feb 24 19:31:40 ever kernel: end_request: I/O error, dev hde, sector 1088
> Feb 24 19:31:40 ever kernel: hde: command error: status=0x51 { DriveReady SeekComplete Error }
> Feb 24 19:31:40 ever kernel: hde: command error: error=0x54 { AbortedCommand LastFailedSense=0x05 }
> .
> . (and so on)
>
> I'm somewhat confused as to what could be happening here, but my first
> guess is that after being spun up to high speed for reading in
> pkt_iosched_process_queue, the firmware promptly forgets whatever it knew
> about the media speed. Perhaps it only stores a single speed value
> internally, so calling pkt_set_speed (pd, pd->write_speed, pd->read_speed)
> with a larger value of read_speed sets them both. And afterwards the drive
> reports this as the maximum media speed on future opens?

You could test that theory with a hack like this:

diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index 94ff3ac..a0d6687 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -461,6 +461,8 @@ static int pkt_set_speed(struct pktcdvd_
struct request_sense sense;
int ret;

+ read_speed = write_speed;
+
init_cdrom_command(&cgc, NULL, 0, CGC_DATA_NONE);
cgc.sense = &sense;
cgc.cmd[0] = GPCMD_SET_SPEED;
@@ -2028,7 +2030,9 @@ static void pkt_release_dev(struct pktcd

pkt_lock_door(pd, 0);

+#if 0
pkt_set_speed(pd, MAX_SPEED, MAX_SPEED);
+#endif
bd_release(pd->bdev);
blkdev_put(pd->bdev);


> If you are curious as to who would curse the market with such a
> buggy product, the drive is a BenQ Q60.

Maybe there is a firmware upgrade available?

--
Peter Osterlund - petero2@xxxxxxxxx
http://web.telia.com/~u89404340
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/