Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Sep 2008 16:20:39 +0400 (MSD)
From:      Eygene Ryabinkin <rea-fbsd@codelabs.ru>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   ports/127608: [patch] sysutils/cdrecord: fix device enumeration via -scanbus
Message-ID:  <20080924122039.1E4E11AF41C@void.codelabs.ru>
Resent-Message-ID: <200809241230.m8OCU2J4012500@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         127608
>Category:       ports
>Synopsis:       [patch] sysutils/cdrecord: fix device enumeration via -scanbus
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Sep 24 12:30:02 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Eygene Ryabinkin
>Release:        FreeBSD 7.1-PRERELEASE i386
>Organization:
Code Labs
>Environment:

System: FreeBSD XXX 7.1-PRERELEASE FreeBSD 7.1-PRERELEASE #19: Tue Sep 23 13:21:48 MSD 2008 root@XXX:/usr/src/sys/i386/compile/XXX i386

>Description:

With the yesterday's (September 23rd, 2008) FreeBSD 7.1-PRERELEASE I was
unable to use cdrecord (compiled from port sysutils/cdrecord): it was
refusing to open SCSI device:
-----
cdrecord: Invalid argument. Cannot open SCSI driver.
-----

Digged through the code, I had found that the first problem lies in the
bus scanning: it does not set ccb_h.path_id to CAM_XPT_PATH_ID during
the call to the XPT_DEV_MATCH routine of ioctl(CAMIOCOMMAND).

Another problem was in the libcam code that has the simular problem:
it is now filed under bin/127605 and contains the patch.

>How-To-Repeat:

Spawn 'cdrecord -scanbus'.  I will output something like
-----
$ cdrecord -scanbus
cdrecord: Invalid argument. CAMIOCOMMAND ioctl failed. Cannot open SCSI driver.
cdrecord: For possible targets try 'cdrecord -scanbus'. Make sure you are root.
cdrecord: For possible transport specifiers try 'cdrecord dev=help'.
Cdrecord-Clone 2.01 (i386-unknown-freebsd7.1) Copyright (C) 1995-2004 Jörg Schilling
-----
My device is the IDE CD/DVD unit PIONEER DVD-RW DVR-108 1.14 emulated
as SCSI device via the atapicam(4) layer.  Running this command under
root does not change the things ;))

>Fix:

The following patch fixes the '-scanbus' issue:
--- patch-libscg::scsi-bsd.c begins here ---
--- libscg/scsi-bsd.c.orig	2008-09-24 14:03:04.000000000 +0400
+++ libscg/scsi-bsd.c	2008-09-24 14:04:03.000000000 +0400
@@ -674,6 +674,9 @@
 	 * system.
 	 */
 	ccb.ccb_h.func_code = XPT_DEV_MATCH;
+	ccb.ccb_h.path_id = CAM_XPT_PATH_ID;
+	ccb.ccb_h.target_id = CAM_TARGET_WILDCARD;
+	ccb.ccb_h.target_lun = CAM_LUN_WILDCARD;
 
 	/*
 	 * Setup the result buffer.
--- patch-libscg::scsi-bsd.c ends here ---
I am not very much sure that one should set target_id and target_lun as
well (without these XPT_DEV_MATCH works too), but these fields are set
in the FreeBSD's camcontrol(8) utility when it performs enumeration, so
I think that these will not hurt, at least on FreeBSD.

In order to successfully burn images with cdrecord I also need the patch
for libcam, as described in bin/127605.  With these two, burning works
without any noticed problems: CD-R and CD-RW disks are toasted fine.

For the record: latest cdrecord alpha from
  ftp://ftp.berlios.de/pub/cdrecord/alpha/cdrtools-2.01.01a49.tar.bz2
still misses the ccb_h.path_id manipulations.
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080924122039.1E4E11AF41C>