From owner-freebsd-bugs@FreeBSD.ORG Tue Oct 10 15:51:05 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0E28616A415 for ; Tue, 10 Oct 2006 15:51:05 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 65ACF43DAA for ; Tue, 10 Oct 2006 15:50:20 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k9AFoKxY041828 for ; Tue, 10 Oct 2006 15:50:20 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k9AFoKPH041827; Tue, 10 Oct 2006 15:50:20 GMT (envelope-from gnats) Resent-Date: Tue, 10 Oct 2006 15:50:20 GMT Resent-Message-Id: <200610101550.k9AFoKPH041827@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Eugene Grosbein Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 46B5716A407; Tue, 10 Oct 2006 15:41:57 +0000 (UTC) (envelope-from eu@grosbein.pp.ru) Received: from grosbein.pp.ru (grgw.svzserv.kemerovo.su [213.184.64.166]) by mx1.FreeBSD.org (Postfix) with ESMTP id C360F43D4C; Tue, 10 Oct 2006 15:41:52 +0000 (GMT) (envelope-from eu@grosbein.pp.ru) Received: from grosbein.pp.ru (localhost [127.0.0.1]) by grosbein.pp.ru (8.13.8/8.13.8) with ESMTP id k9AFfjGm001685; Tue, 10 Oct 2006 23:41:45 +0800 (KRAST) (envelope-from eu@grosbein.pp.ru) Received: (from root@localhost) by grosbein.pp.ru (8.13.8/8.13.8/Submit) id k9AFfiEO001684; Tue, 10 Oct 2006 23:41:44 +0800 (KRAST) (envelope-from eu) Message-Id: <200610101541.k9AFfiEO001684@grosbein.pp.ru> Date: Tue, 10 Oct 2006 23:41:44 +0800 (KRAST) From: Eugene Grosbein To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: sos@FreeBSD.org Subject: kern/104270: [patch] [atapicd] burncd failure due to acd_get_progress() misbehavour (regression) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Oct 2006 15:51:05 -0000 >Number: 104270 >Category: kern >Synopsis: [patch] [atapicd] burncd failure due to acd_get_progress() misbehavour (regression) >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Oct 10 15:50:20 GMT 2006 >Closed-Date: >Last-Modified: >Originator: Eugene Grosbein >Release: FreeBSD 6.2-PRERELEASE i386 >Organization: Svyaz Service JSC >Environment: System: FreeBSD grosbein.pp.ru 6.2-PRERELEASE FreeBSD 6.2-PRERELEASE #0: Tue Oct 10 22:01:23 KRAST 2006 eu@grosbein.pp.ru:/mnt/home/obj/usr/local/src/sys/DADV i386 acd0: DVDR >Description: I've dual boot machine with FreeBSD 4.11-STABLE and 6.2-PRERELEASE, later is built using today's sources. burncd blank for CD-RW works fine with 4.11, it shows progress status and finishes after 100%. In 6.2, it does not show percents and sleeps forever. It uses CDRIOCGETPROGRESS ioctl to get progress status from the kernel. This ioctl is processed with acd_get_progress() function that throws away progress status obtained from the drive unless request->u.atapi.sense.error contains highest bit set (0x80). For my drive, it equals to 0x70 during blanking process and becomes zero after finishing so atapicd's logic failt to return correct data to userland. >How-To-Repeat: Take NEC DVD RW ND-3500AG/2.18 and try to blank CD-RW with burncd. >Fix: Preliminary patch that makes burncd work for me: --- atapi-cd.c.orig Fri Sep 29 21:05:26 2006 +++ atapi-cd.c Tue Oct 10 23:27:23 2006 @@ -1234,7 +1234,7 @@ request->flags = ATA_R_ATAPI | ATA_R_READ; request->timeout = 30; ata_queue_request(request); - if (!request->error && request->u.atapi.sense.error & ATA_SENSE_VALID) + if (!request->error && request->u.atapi.sense.error) *finished = ((request->u.atapi.sense.specific2 | (request->u.atapi.sense.specific1 << 8)) * 100) / 65535; else I've failed to find the reason for checking highest bit of u.atapi.sense.error, this check fails for me so I've removed it. Eugene Grosbein >Release-Note: >Audit-Trail: >Unformatted: