cdrom: longer timeout for "Read Track Info" command
Subsystems (2)
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.
drivers/cdrom/cdrom.c +1 -0
@@ -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;
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 thecdrom_get_track_info()function) takes about 7 seconds to run. The current implementation ofcdrom_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)
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 thecdrom_get_track_info()function) takes about 7 seconds to run. The current implementation ofcdrom_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
@@ -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
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@@ -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 */