Skip to contentSkip to conversation

cdrom: longer timeout for "Read Track Info" command

PATCH In review Jeremy Higdon 3 participants 4 messages Jan 2, 2007 – Jan 3, 2007

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 cdrom: longer timeout for "Read Track Info" command

I have a DVD combo drive and a CD in which the
"READ TRACK INFORMATION" command (implemented in the cdrom_get_track_info() function) takes about 7 seconds to run. The current implementation of cdrom_get_track_info() uses the default timeout of 5 seconds. So here's a patch that increases the timeout from 5 to 15 seconds.

The drive in question is a TSSTcorpCD/DVDW SN-S082D, and I have a Silicon Image 680A adapter, in case that's of interest.

Signed-off-by <[email protected]>
drivers/cdrom/cdrom.c +1 -0
diff -ur linux-2.6.20-rc3_ORIG/drivers/cdrom/cdrom.c linux-2.6.20-rc3/drivers/cdrom/cdrom.c
@@ -3094,6 +3094,7 @@
 	cgc.cmd[5] = track & 0xff;
 	cgc.cmd[8] = 8;
 	cgc.quiet = 1;
+	cgc.timeout = 15*HZ;
 
 	if ((ret = cdo->generic_packet(cdi, &cgc)))
 		return ret;
#1 lore raw
Quoted 11 lines · On Mon, 1 Jan 2007 18:36:24 -0800 Jeremy Higdon <[email protected]> wrote:

I have a DVD combo drive and a CD in which the
"READ TRACK INFORMATION" command (implemented in the cdrom_get_track_info() function) takes about 7 seconds to run. The current implementation of cdrom_get_track_info() uses the default timeout of 5 seconds. So here's a patch that increases the timeout from 5 to 15 seconds.

The drive in question is a TSSTcorpCD/DVDW SN-S082D, and I have a Silicon Image 680A adapter, in case that's of interest.

Signed-off-by <[email protected]>

Please test with a seven second timeout rather than fifteen which is way longer than anyone wants to wait. Seven is the magic value used by another major vendor so ought to be right for all hardware 8)

#2 lore raw
Quoted 10 lines · Alan
Quoted 7 lines · On Mon, 1 Jan 2007 18:36:24 -0800 Jeremy Higdon <[email protected]> wrote:

I have a DVD combo drive and a CD in which the
"READ TRACK INFORMATION" command (implemented in the cdrom_get_track_info() function) takes about 7 seconds to run. The current implementation of cdrom_get_track_info() uses the default timeout of 5 seconds. So here's a patch that increases the timeout from 5 to 15 seconds.

Quoted 8 lines
Quoted 4 lines

The drive in question is a TSSTcorpCD/DVDW SN-S082D, and I have a Silicon Image 680A adapter, in case that's of interest.

Signed-off-by <[email protected]>

Please test with a seven second timeout rather than fifteen which is way longer than anyone wants to wait. Seven is the magic value used by another major vendor so ought to be right for all hardware 8)

Yep, I suspect this patch is long overdue. Jeremy, is this enough to fix it for you?

drivers/cdrom/cdrom.c +7 -1
index 66d028d..3105ddd 100644
@@ -337,6 +337,12 @@ static const char *mrw_address_space[] = { "DMA", "GAA" };
 /* used in the audio ioctls */
 #define CHECKAUDIO if ((ret=check_for_audio_disc(cdi, cdo))) return ret
 
+/*
+ * Another popular OS uses 7 seconds as the hard timeout for default
+ * commands, so it is a good choice for us as well.
+ */
+#define CDROM_DEF_TIMEOUT	(7 * HZ)
+
 /* Not-exported routines. */
 static int open_for_data(struct cdrom_device_info * cdi);
 static int check_for_audio_disc(struct cdrom_device_info * cdi,
@@ -1528,7 +1534,7 @@ void init_cdrom_command(struct packet_command *cgc, void *buf, int len,
 	cgc->buffer = (char *) buf;
 	cgc->buflen = len;
 	cgc->data_direction = type;
-	cgc->timeout = 5*HZ;
+	cgc->timeout = CDROM_DEF_TIMEOUT;
 }
 
 /* DVD handling */
Signature · 1 line
Jens Axboe
#3 lore raw
Quoted 2 lines · Jens Axboe

Yep, I suspect this patch is long overdue. Jeremy, is this enough to fix it for you?

Yes, the 7 second timeout is fine. It actually takes about 6.7 seconds. I guess if "another popular OS" has a 7 second timeout that we won't find multimedia devices out there that take longer than that. :-)

My 15 seconds assumed that the observed case wasn't the worst case, but it probably is.

This patch looks good.

Thanks

jeremy

Quoted 26 lines
drivers/cdrom/cdrom.c +7 -1
index 66d028d..3105ddd 100644
@@ -337,6 +337,12 @@ static const char *mrw_address_space[] = { "DMA", "GAA" };
 /* used in the audio ioctls */
 #define CHECKAUDIO if ((ret=check_for_audio_disc(cdi, cdo))) return ret
 
+/*
+ * Another popular OS uses 7 seconds as the hard timeout for default
+ * commands, so it is a good choice for us as well.
+ */
+#define CDROM_DEF_TIMEOUT	(7 * HZ)
+
 /* Not-exported routines. */
 static int open_for_data(struct cdrom_device_info * cdi);
 static int check_for_audio_disc(struct cdrom_device_info * cdi,
@@ -1528,7 +1534,7 @@ void init_cdrom_command(struct packet_command *cgc, void *buf, int len,
 	cgc->buffer = (char *) buf;
 	cgc->buflen = len;
 	cgc->data_direction = type;
-	cgc->timeout = 5*HZ;
+	cgc->timeout = CDROM_DEF_TIMEOUT;
 }
 
 /* DVD handling */