no tape - ENXIO - device not configured

Dan Langille dan at langille.org
Sat Dec 17 16:00:07 PST 2005


You probably know that I'm a developer on the Bacula 
<http://www.bacula.org/> project.  One of the issues we're trying to 
improve now is using the tape drive when there is no tape.

Basically Bacula needs to open() the tape drive so that it can 
read/write it.  On both Linux and Solaris, it is possible to open the 
drive with O_NONBLOCK and get a descriptor that can be used for 
ioctl() calls and providing there is a tape in the drive, it can be 
used for read() and write().  

On FreeBSD, if there is no tape in the drive, the OS always 
immediately returns errno=ENXIO "Device not configured".  This means 
that on FreeBSD, if there is no tape in the drive, that drive is 
totally unusable by Bacula.

Another developer, who actually does most of the tape writing 
routines had two suggestions:

1. Modify Bacula and system dependent code that opens the control 
device to see if a tape drive is really there or not, and then 
rewrite the tape driver code to deal with the fact that if you cannot 
open a device, it may really be there, and you should continue trying 
to open it between asking the user to mount it.  This is clearly 
possible.

2. Consider implementing something in FreeBSD as exists on at least 
Linux and Solaris -- i.e. a means to open the drive and get a valid 
file descriptor.  If you read/write/rewind/... a drive opened and 
there is no tape, it should either return EIO or better ENOMEDIUM.  

Comments?

-- 
Dan Langille : http://www.langille.org/
BSDCan - The Technical BSD Conference - http://www.bsdcan.org/




More information about the freebsd-scsi mailing list