a zero cylinder and/or head count, set them and the sector count
to some fictious values. The same already happens if the request
sense is unsuccessfull.
>From: Adam David <adam@veda.is>
Subject: SCSI timeout in sdopen()
Date: Sun, 6 Feb 1994 21:40:48 GMT
Index: sys FreeBSD-current
Reference: FreeBSD-current/sys/9
Description:
sdopen() times out on slow SCSI devices. This code was moved into
a different file, which might explain why it got missed again.
Repeat-By:
using slow SCSI disks
cd.c:
Initialize channel info in CDIOCSETVOL ioctl.
Correct CDIOCSTOP and CDIOCEJCET ioctls to use scsi_stop_unit
instead of scsi_start_unit.
Add CDIOCALLOW and CDIOCPREVENT ioctls.
ch.h:
Return EBUSY instead of ENXIO if the device is already in use.
scsi_base.c:
Add scsi_stop_unit routine.
sd.c:
Add mising indirection through sc_link to sd_get_parms routine
when checking for media loaded.
st.c:
Return EBUSY instead of ENXIO if the device is already in use.
Clear the SDEV_WAITING flag in ststart if we do the wakeup call.
a binary link-kit. Make all non-optional options (pagers, procfs) standard,
and update LINT to reflect new symtab requirements.
NB: -Wtraditional will henceforth be forgotten. This editing pass was
primarily intended to detect any constructions where the old code might
have been relying on traditional C semantics or syntax. These were all
fixed, and the result of fixing some of them means that -Wall is now a
realistic possibility within a few weeks.
Here is the fix for the 'hanging' bug.
This bug happenned whenever two operations were already underway on the
disk and a third (non-IO) command was requested..
in this case the process submitting the NON-IO command was requested to wait,
and a flag set so that on completion of the IO commands, the Non-io command
was given priority over any pending IO commands. (the queue is not
allowed to drain while there are pending "special" ops).
The flag that indicated this was not being reset, so further IO commands
were prohibited from that moment on.
Date: Wed, 20 Oct 1993 18:28:44 +0300
Editors Note:
Line ended with comma (``,'') instead of semicolon (``;''),
this should not have effected the code.
Submitter made no comments other than it was ``simple''.
Subject: Re: Error reading from DAT (fwd)
Date: Mon, 11 Oct 1993 03:02:39 -40962758 (WST)
Some tapes won't do anything until you tell them to load.
Other tapes think that being asked to load is a great excuse to
make the next command return a "unit attention" (media changed) error.
Since we need to do the load, throw in a dummy instruction to cop the
error.
specifically for DEC DAT drives.
>Date: Sat, 11 Sep 93 12:59:39 +0800
1/ fix bug where cd0a was unusable because it was compared against
the number of 2k blocks not the number of 512byte blocks.. gave
an error for all reads past 1/4 way through the disk (cd0d was ok).
2/ fix open code so that it now notices if a disk has been changed
and updates the disklabel.
3/ use the new error handling code from st.c
4/ start adding stuff to get ready for using cd_scsi_cmd from
cd_start (like is done in st and sd)
5/ more general cleanups including making dmesg report
sector size of disk.. (believe it or not SUN drives use 512 byte)
in your config file from:
device cd0
device cd1
...
device cdn
to either
device cd0
or
psuedo-device cd0
The driver now dynamically allocates all per unit dependent structs, so it
will never run out of units (okay, so now we need 32 bit device major/minor
numbers!). It will allocate unit numbers as it needs them.
data. cd_data is now malloced on a per unit basis.
Protected all if ({scsi,cd}_debug).... with #ifdef CDDEBUG to reduce the
the size of the kernel when not debugging.