da(4)
NAME
da - SCSI Direct Access device driver
SYNOPSIS
device da
DESCRIPTION
- The da driver provides support for all SCSI devices of the
- direct access
class that are attached to the system through a supported - SCSI Host
Adapter. The direct access class includes disk, magneto-op - tical, and
solid-state devices. - A SCSI Host adapter must also be separately configured into
- the system
before a SCSI direct access device can be configured.
PARTITIONING
- The da driver allows the disk to have two levels of parti
- tioning. One
layer, called the ``slice layer'', is used to separate the - FreeBSD areas
of the disk from areas used by other operating systems. The - second layer
is the native 4.4BSD partitioning scheme, disklabel(5), - which is used to
subdivide the FreeBSD slices into areas for individual file - systems and
swap spaces. For more information, see fdisk(8) and diskla - bel(8),
respectively. - If an uninitialized disk is opened, the slice table will be
- initialized
with a fictitious FreeBSD slice spanning the entire disk. - Similarly, if
an uninitialized (or non-FreeBSD) slice is opened, its - disklabel will be
initialized with parameters returned by the drive and a sin - gle `c' partition encompassing the entire slice.
CACHE EFFECTS
- Many direct access devices are equipped with read and/or
- write caches.
Parameters affecting the device's cache are stored in mode - page 8, the
caching control page. Mode pages can be examined and modi - fied via the
camcontrol(8) utility. - The read cache is used to store data from device-initiated
- read ahead
operations as well as frequently used data. The read cache - is transparent to the user and can be enabled without any adverse ef
- fect. Most
devices with a read cache come from the factory with it en - abled. The
read cache can be disabled by setting the RCD (Read Cache - Disable) bit in
the caching control mode page. - The write cache can greatly decrease the latency of write
- operations and
allows the device to reorganize writes to increase efficien - cy and performance. This performance gain comes at a price. Should the
- device lose
power while its cache contains uncommitted write operations, - these writes
will be lost. The effect of a loss of write transactions on - a file system is non-deterministic and can cause corruption. Most de
- vices age
write transactions to limit vulnerability to a few transac - tions recently
reported as complete, but it is none-the-less recommended - that systems
with write cache enabled devices reside on an Uninterrupt - ible Power Supply (UPS). The da device driver ensures that the cache and
- media are
synchronized upon final close of the device or an unexpected - shutdown
(panic) event. This ensures that it is safe to disconnect - power once the
operating system has reported that it has halted. The write - cache can be
enabled by setting the WCE (Write Cache Enable) bit in the - caching control mode page.
TAGGED QUEUING
- The da device driver will take full advantage of the SCSI
- feature known
as tagged queueing. Tagged queueing allows the device to - process multiple transactions concurrently, often re-ordering them to re
- duce the number and length of seeks. To ensure that transactions to
- distant portions
of the media, which may be deferred indefinitely by servic - ing requests
nearer the current head position, are completed in a timely - fashion, an
ordered tagged transaction is sent every 15 seconds during - continuous
device operation.
BAD BLOCK RECOVERY
- Direct Access devices have the capability of mapping out
- portions of
defective media. Media recovery parameters are located in - mode page 1,
the Read-Write Error Recovery mode page. The most important - media remapping features are 'Auto Write Reallocation' and 'Auto Read
- Reallocation'
which can be enabled via the AWRE and ARRE bits, respective - ly, of the
Read-Write Error Recovery page. Many devices do not ship - from the factory with these feature enabled. Mode pages can be examined
- and modified
via the camcontrol(8) utility.
KERNEL CONFIGURATION
- It is only necessary to explicitly configure one da device;
- data structures are dynamically allocated as disks are found on the
- SCSI bus.
IOCTLS
- The following ioctl(2) calls apply to SCSI disks as well as
- to other
disks. They are defined in the header file - DIOCSBAD Usually used to set up a bad-block mapping sys
- tem on the
- disk. SCSI drives incorporate their own bad
- block mapping so
this command is not implemented. - DIOCGDINFO Read, from the kernel, the in-core copy of the
- disklabel for
- the drive. This may be a fictitious disklabel
- if the drive
has never been initialized, in which case it - will contain
information read from the SCSI inquiry commands. - DIOCSDINFO Give the driver a new disklabel to use. The
- driver will not
- write the new disklabel to the disk.
- DIOCWLABEL Enable or disable the driver's software write
- protect of the
- disklabel on the disk.
- DIOCWDINFO Give the driver a new disklabel to use. The
- driver will
- write the new disklabel to the disk.
SYSCTL VARIABLES
- The following variables are available as both sysctl(8)
- variables and
loader(8) tunables: - kern.cam.da.retry_count
This variable determines how many times the da driver- will retry a
READ or WRITE command. This does not affect the number - of retries
used during probe time or for the da driver dump rou - tine. This value
currently defaults to 4. - kern.cam.da.default_timeout
This variable determines how long the da driver will- wait before timing out an outstanding command. The units for this val
- ue are seconds, and the default is currently 60 seconds.
- kern.cam.da.%d.minimum_cmd_size
This variable determines what the minimum READ/WRITE CDB- size is for
a given da unit. (The %d above denotes the unit number - of the da
driver instance, e.g. 1, 2, 4, 8, etc.) Valid minimum - command size
values are 6, 10, 12 and 16 bytes. The default is 6 - bytes.
- The da driver issues a CAM Path Inquiry CCB at probe
- time to determine whether the protocol the device in question speaks
- (e.g. ATAPI)
typically does not allow 6 byte commands. If it does - not, the da
driver will default to using at least 10 byte CDBs. If - a 6 byte READ
or WRITE fails with an ILLEGAL REQUEST error, the da - driver will then
increase the default CDB size for the device to 10 bytes - and retry
the command. CDB size is always chosen as the smallest - READ/WRITE
CDB that will satisfy the specified minimum command - size, and the LBA
and length of the READ or WRITE in question. (e.g., a - write to an
LBA larger than 2^32 will require a 16 byte CDB.)
NOTES
- If a device becomes invalidated (media is removed, device
- becomes unresponsive) the disklabel and information held within the ker
- nel about the
device will be invalidated. To avoid corruption of a newly - inserted
piece of media or a replacement device, all accesses to the - device will
be discarded until the last file descriptor referencing the - old device is
closed. During this period, all new open attempts will be - rejected.
FILES
- /dev/dausn raw mode SCSI disk unit u, slice n, accessed
- as an unpar
- titioned device
- /dev/daup raw mode SCSI disk unit u, first FreeBSD
- slice, partition
- p
- /dev/dausnp raw mode SCSI disk unit u, nth slice, parti
- tion p
DIAGNOSTICS
None.
SEE ALSO
ad(4), disklabel(5), disklabel(8), fdisk(8)
HISTORY
- The da driver was written for the CAM SCSI subsystem by
- Justin T. Gibbs.
Many ideas were gleaned from the sd device driver written - and ported from
Mach 2.5 by Julian Elischer. Support for slices was written - by Bruce
Evans. - BSD September 2, 2003