Subject: kern/7300: 'chio ielem' does not work well
To: None <gnats-bugs@gnats.netbsd.org>
From: None <woods@mail.weird.com>
List: netbsd-bugs
Date: 04/01/1999 19:02:04
>Number:         7300
>Category:       kern
>Synopsis:       'chio ielem' does not work well
>Confidential:   no
>Severity:       non-critical
>Priority:       high
>Responsible:    kern-bug-people (Kernel Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Apr  1 16:05:00 1999
>Last-Modified:
>Originator:     Greg A. Woods
>Organization:
Planix, Inc.; Toronto, Ontario; Canada
>Release:        NetBSD-1.3.3
>Environment:

System: NetBSD 1.3.3 i386

>Description:

	I've been trying to get an Exabyte 10e tape changer library
	(with an EXB-8505XL tape drive) working for a client, but so far
	I've encountered more frustration than success (though I must
	say I am extremely happy that it was merely a matter of plugging
	the thing in and issuing simple "chio" commands to load and
	unload tapes, etc.!  Yeah NetBSD!  Yeah robotics and automation!).

	When the device boots it reports, if you're lucky, that all
	slots and drives as accessable, but are in the "abnormal"
	<EXCEPT> state:

	17:31 [735] # chio status
	picker 0: 
	slot 0: <ACCESS,EXCEPT>
	slot 1: <ACCESS,EXCEPT>
	slot 2: <ACCESS,EXCEPT>
	slot 3: <ACCESS,EXCEPT>
	slot 4: <ACCESS,EXCEPT>
	slot 5: <ACCESS,EXCEPT>
	slot 6: <ACCESS,EXCEPT>
	slot 7: <ACCESS,EXCEPT>
	slot 8: <ACCESS,EXCEPT>
	slot 9: <ACCESS,EXCEPT>
	drive 0: <ACCESS>

	Unforunately there doesn't seem to be an easy way to get the
	library to check the status of the tape slots when it's
	rebooted, and the "chio" command that I thought would do the
	trick (chio ielem) only causes the following errors:

	17:52 [755] # chio ielem
	chio: /dev/ch0: CHIOIELEM: Input/output error

	ch0(ahc1:4:0): timed out in dataout phase, SCSISIGI == 0x0
	ch0(ahc1:4:0): BUS DEVICE RESET message queued.
	Bus Device Reset Message Sent
	ch0(ahc1:4:0): Bus Device Reset delivered. 1 SCBs aborted

	So far as I can tell the library is properly configured and
	there's no obvious option in its configuration to force it to do
	a status check on restart (the manual says this is something the
	driver or application must do).  It is possible that these
	problems are due to the rather old firmware in it, and perhaps
	we should try updating it....  (and the drive too?).  I don't
	expect this is a 1.3.3 issue, but I've not had a chance to plug
	the library into a -current system to prove it.

	FYI the 1.3.3 kernel device probes report: (these are the only
	devices on the second host adapter)

	ahc1 at pci1 dev 7 function 0
	ahc1: interrupting at irq 10
	ahc1: aic7870 Single Channel, SCSI Id=7, 16 SCBs
	scsibus1 at ahc1 channel 0: 8 targets
	ahc1: target 3 synchronous at 5.0MHz, offset = 0xb
	st0 at scsibus1 targ 3 lun 0: <EXABYTE, EXB-85058SQANXR1, 0781> SCSI2 1/sequential removable
	st0: drive empty
	ch0 at scsibus1 targ 4 lun 0: <EXABYTE, EXB-10e, 1.5> SCSI2 8/changer removable
	ch0: 10 slots, 1 drive, 1 picker, 0 portals

	Also I often get the following (either from chio or from
	amanda's chg-scsi):

	ch0(ahc1:4:0):  Check Condition on opcode 0xa5
	    SENSE KEY:  Illegal Request
	     ASC/ASCQ:  ASC 0x3b ASCQ 0x83
	
	ch0(ahc1:4:0):  Check Condition on opcode 0xa5
	    SENSE KEY:  Illegal Request
	     ASC/ASCQ:  ASC 0x3b ASCQ 0x84

	FYI the 1.3.3 kernel is also very verbose about things it
	probably shouldn't even bother printing (but I think this issue
	has already been discussed, and may already be corrected for
	1.4):

	st0(ahc1:3:0):  Check Condition on opcode 0x0
	    SENSE KEY:  Not Ready
	     ASC/ASCQ:  Logical Unit Is in Process Of Becoming Ready
	
	st0(ahc1:3:0):  Check Condition on opcode 0x0
	    SENSE KEY:  Not Ready
	     ASC/ASCQ:  Logical Unit Is in Process Of Becoming Ready
	
	st0(ahc1:3:0):  Check Condition on opcode 0x0
	    SENSE KEY:  Not Ready
	     ASC/ASCQ:  Logical Unit Is in Process Of Becoming Ready
	
	st0(ahc1:3:0):  Check Condition on opcode 0x0
	    SENSE KEY:  Not Ready
	     ASC/ASCQ:  Logical Unit Is in Process Of Becoming Ready
	
	st0(ahc1:3:0):  Check Condition on opcode 0x0
	    SENSE KEY:  Not Ready
	                EOM Detected
	     ASC/ASCQ:  Logical Unit Is in Process Of Becoming Ready
	
	st0(ahc1:3:0):  Check Condition on opcode 0x8
	    SENSE KEY:  Blank Check
	                EOM Detected
	   INFO FIELD:  32768
	     ASC/ASCQ:  End-Of-Data Detected

>How-To-Repeat:

	run "chio ielem" with /dev/ch0 connected to an Exabyte-10e
	library.

>Fix:

	unknown.

	Workaround:

	for tslot in 0 1 2 3 4 5 6 7 8 9 ; do
		chio move slot $tslot drive 0
		sleep 90
		eject /dev/rst0
		sleep 10
		chio move drive 0 slot $tslot
	done

	...and wait, and wait, and wait some more....   :-)

	Possibly better idea:

	only move slots which are in the <ACCESS,EXCEPT> status....

	Should also fix Amanda's chg-scsi to assume the best if the slot
	status is <ACCESS,EXCEPT> too (it currently considers the slot
	is empty and won't even try to move the "phantom" tape to the
	drive and see if anything gets loaded).

>Audit-Trail:
>Unformatted: