Subject: Re: hangs while trying to record a CD
To: Nathan J. Williams <nathanw@wasabisystems.com>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: port-i386
Date: 05/15/2002 20:01:49
--yrj/dFKFPuw6o+aM
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Wed, May 15, 2002 at 12:41:36PM -0400, Nathan J. Williams wrote:
> Here's what I came up with (from a slightly different command,
> cdrecord -v blank=all):
> 
> cd0(pciide0:1:0):  sense debug information:
>         code 0x70 valid 0x0
>         seg 0x0 key 0x6 ili 0x0 eom 0x0 fmark 0x0
> 
> info: 0x0 0x0 0x0 0x0 followed by 10 extra bytes
>         extra: 0x0 0x0 0x0 0x0 0x29 0x0 0x0 0x0 0x0 0x0 
> cd0(pciide0:1:0):  sense debug information:
>         code 0x70 valid 0x0
>         seg 0x0 key 0x5 ili 0x0 eom 0x0 fmark 0x0
> 
> info: 0x0 0x0 0x0 0x0 followed by 10 extra bytes
>         extra: 0x0 0x0 0x0 0x0 0x64 0x0 0x0 0x0 0x0 0x0 
> cd0(pciide0:1:0): illegal request, data = 00 00 00 00 64 00 00 00 00 00
> cd0: dos partition I/O error
> wdc_atapi_intr: warning: reading only 1 of 2 bytes
> xs(0xc166b000): xs_control(0x00009018)xs_status(0x00000000)periph(0xc1546700)retr(0x0)timo(0x9c40)cmd(0xc166b088)len(0xc)data(0xe2df2c80)len(0x103)res(0x103)err(0x0)bp(0xc1639d08)cd0(pciide0:1:0):  command: 0x5a,0x0,0x3f,0x0,0x0,0x0,0x0,0x1,0x3,0x0,0x0,0x0-[259 bytes]

OK, the len is wrong. The command comes from cdrecord.
Can you try to remplace patch-aj by the one attached and rebuild cdrecord ?

-- 
Manuel Bouyer <bouyer@antioche.eu.org>
--

--yrj/dFKFPuw6o+aM
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=patch-aj

$NetBSD: patch-aj,v 1.2 2001/08/07 11:23:57 drochner Exp $

--- cdrecord/scsi_cdr.c.orig	Wed Apr 11 00:22:21 2001
+++ cdrecord/scsi_cdr.c	Wed May 15 19:55:52 2002
@@ -271,6 +271,12 @@
 request_sense(scgp)
 	SCSI	*scgp;
 {
+
+#ifdef __NetBSD__
+	/* request sense already done by kernel */
+	scg_prsense((Uchar *)scgp->scmd->u_sense.cmd_sense,
+	    scgp->scmd->sense_count);
+#else	
 		 char	sensebuf[CCS_SENSE_LEN];
 	register struct	scg_cmd	*scmd = scgp->scmd;
 
@@ -290,6 +296,7 @@
 	if (scg_cmd(scgp) < 0)
 		return (-1);
 	scg_prsense((Uchar *)sensebuf, CCS_SENSE_LEN - scg_getresid(scgp));
+#endif
 	return (0);
 }
 
@@ -1741,9 +1748,9 @@
 
 	fillbytes(mode, sizeof(mode), '\0');
 	scgp->silent++;
-	if (mode_sense(scgp, mode, 0xFF, 0x3F, current?0:2) < 0) {	/* All Pages */
+	if (mode_sense(scgp, mode, 0xFE, 0x3F, current?0:2) < 0) {	/* All Pages */
 		fillbytes(mode, sizeof(mode), '\0');
-		if (mode_sense(scgp, mode, 0xFF, 0, current?0:2) < 0)	{/* VU (block desc) */
+		if (mode_sense(scgp, mode, 0xFE, 0, current?0:2) < 0)	{/* VU (block desc) */
 			scgp->silent--;
 			return (-1);
 		}

--yrj/dFKFPuw6o+aM--