Subject: kern/36030: K3b panics the machine while verifying written disc
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: None <svs+pr@grep.ru>
List: netbsd-bugs
Date: 03/18/2007 15:05:01
>Number:         36030
>Category:       kern
>Synopsis:       K3b panics the machine while verifying written disc
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Mar 18 15:05:00 +0000 2007
>Originator:     User Svssvs+pr@grep.ru
>Release:        NetBSD 4.0_BETA2
>Organization:
>Environment:
	
	
System: NetBSD mononoke.nyo 4.0_BETA2 NetBSD 4.0_BETA2 (MONONOKE-$Revision: 1.2 $) #2: Sat Mar 10 23:00:34 MSK 2007 svs@mononoke.nyo:/vol/2/b/obj/kernel/i386.M i386
Architecture: i386
Machine: i386
>Description:
	
K3b sends a READ 10 command for 128 2048-byte sectors and 4.0_BETA2 instantly panics:

pmap_unwire: wiring for pmap 0xcce97004 va 0x836e000 didn't change!
cd1(piixide0:0:1): physio split the request.. cannot proceed
panic: kernel diagnostic assertion "(bp->b_flags & B_ERROR) == 0" failed: file "/vol/2/s/src-4-0/sys/kern/kern_physio.c", line 201

$NetBSD: kern_physio.c,v 1.76 2006/11/01 10:17:58 yamt Exp $
>How-To-Repeat:
	
Write a data CD in K3b, be sure to enable data verification.
>Fix:
	
Only a workaround for K3b:

--- libk3b/jobs/k3bdatatrackreader.cpp.orig	2007-02-08 14:14:53.000000000 +0000
+++ libk3b/jobs/k3bdatatrackreader.cpp
@@ -216,7 +216,11 @@ void K3bDataTrackReader::WorkThread::run
   //
   m_device->setSpeed( 0xffff, 0xffff );
 
+#ifdef __NetBSD__
+  s_bufferSizeSectors = 31;
+#else
   s_bufferSizeSectors = 128;
+#endif
   unsigned char* buffer = new unsigned char[m_usedSectorSize*s_bufferSizeSectors];
   while( s_bufferSizeSectors > 0 && read( buffer, m_firstSector.lba(), s_bufferSizeSectors ) < 0 ) {
     kdDebug() << "(K3bDataTrackReader) determine max read sectors: "

>Unformatted: