Generic SCSI Target Middle Level for Linux
The SCSI target mid-level subsystem for
Linux (SCST) is a new subsystem of the Linux kernel that provides a
standard framework for SCSI target drivers development. It is designed
provide unified, consistent interface between SCSI target drivers and
Linux kernel and simplify target drivers development as much as
possible. A system with a SCSI target device is able to share its local
or virtual devices with other systems on a network with SCSI protocol
support, e.g. SCSI bus, Fibre Channel, TCP/IP with iSCSI. This is
commonly used for data storage virtualization.
SCST has the following features:
- Simple, easy to use interface with target drivers. Particularly,
SCST performs all required pre- and post- processing of incoming
requests and all necessary error recovery.
- Undertakes most problems, related to execution contexts, thus
practically eliminating one of the most complicated problem in the
kernel drivers development. For example, a target driver for Qlogic
2200/2300 cards, which has all necessary features, is only ~2000 lines
of code long.
- Very low overhead, fine-grained locks and simplest commands
processing path, which allow to reach maximum possible performance and
scalability. Particularly, incoming
requests can be processed in the caller's context or in
one of the internal SCST's tasklets, therefore no extra context
- Provides advanced per-initiator device visibility management,
which allows different initiators could see different set of devices
with different access permissions. For instance, initiator A could see
target T devices Da and Db read-writable, and initiator B from the same
target T could see devices Db read-only and Dc read-writable.
- Complete SMP support.
- Emulates necessary functionality of SCSI host adapter, because
from a remote initiator's point of view SCST acts as a SCSI host with
own devices. Some of the emulated functions are the following:
- Generation of necessary UNIT ATTENTIONs, their storage and
delivery to all connected remote initiators (sessions).
- RESERVE/RELEASE functionality.
- CA/ACA conditions.
- All types of RESETs and other task management functions.
- REPORT LUNS command as well as SCSI address space management
in order to have consistent address space on all remote initiators,
since local SCSI devices could not know about each other to report
via REPORT LUNS command. Additionally, SCST responds with error on
all commands to non-existing devices and provides access control
(not implemented yet), so different remote initiators could see
different set of devices.
- Other necessary functionality (task attributes, etc.) as
specified in SAM-2, SPC-2, SAM-3, SPC-3 and other SCSI standards.
- Device handlers (i.e. plugins) architecture provides extra
flexibility by allowing to make any additional
requests processing, which is completely independent from target
drivers and SCST core, like, for instance, device dependent exceptional
conditions treatment, data caching or passing commands in the user
space for device emulation. Example of such plugin is FILEIO device
handler (see below) .
- Well documented.
Interoperability between SCST and local
SCSI initiators (like sd, st) is
the additional issue that SCST is going to address (it is not
implemented yet). It is necessary, because local SCSI initiators can
change the state of the device, for example RESERVE the device, or some
of its parameters and that would be done behind SCST, which could lead
to various problems. Thus, RESERVE/RELEASE commands, locally generated
UNIT ATTENTIONs, etc. should be intercepted and processed as if local
SCSI initiators act as remote SCSI initiators connected to SCST. This
feature requires some the kernel modification. Since in the current
version it is not implemented, SCST and target drivers are
able to work with any 2.4 or 2.6 kernel version.
Interface between SCST and target
drivers is based on work, done by University
of New Hampshire Interoperability Labs (UNH IOL) for the UNH-iSCSI
project, which is currently developed on SourceForge.net.
The latest stable version is 0.9.4. It
supports SCSI disks (type 0), tapes (type 1), processors (type
3), CDROMs (type 5), MO disks (type 7), medium changers (type 8) and
RAID controllers (type 0xC). Also it supports FILEIO and "performance"
device handlers. FILEIO device handler allows to use files on file
systems or block devices as virtual remotely available SCSI disks or
CDROM's. "Performance" device handlers provide a way for direct
performance measurements without overhead of actual data transferring
from/to underlying SCSI device. Requires Linux kernel 2.6.14 or higher.
Tested on i386 and x86_64 only,
but should also
work on any other
supported by Linux platform. More detail information you could find in
the project README file.
Starting from version 0.9.4 2.4 Linux
kernels are not supported anymore, although there could be new SCST
releases those kernels with very important bug fixes. The latest stable
version of SCST with 2.4 kernels support is 0.9.3.1-24.
If you have any questions you can ask
them on the SCST SF.net page either using forum, or scst-devel mailing
SCST SF.net project
Documentation: HTML, PDF
The latest development versions of SCST and its drivers are
available directly from the
project's SVN. You can access it using either web-based SVN
repository viewer or using anonymous access:
svn co https://svn.sourceforge.net/svnroot/scst
More information about accessing SVN repository may be found here.
History of the pre-SVN SCST development is available in SCST CVS
repository, which is accessible using web-based CVS
repository viewer or anonymous CVS access.
Target driver for Qlogic 2200/2300 cards for 2.6 kernels
This is ported version of the
previous target driver for 2.4 kernels (see below) to the in-tree 2.6
Qlogic 2x00 initiator
driver. The port was done by Nathaniel Clark. This is stable and
functional driver with
the larger feature set, than the parent driver has.
The latest version is 0.9.3.8. Requires
Linux kernel version 2.6.15.X and SCST version 0.9.4 or higher.
For usage with other kernel versions you will need to port the
initiator patch to that version of the kernel.
You can find the latest development
version of this driver in the SCST CVS. See above how to setup access
Target driver for Qlogic 2200/2300 cards
Target driver for Qlogic 2200/2300
cards has all required features and
looks to be quite stable. It is designed to work in conjunction with
driver, which is intended to perform all the initialization and
shutdown tasks. In the current release as a base for the initiator
driver was taken Red Hat's driver from the stock 2.4.20 kernel. Then it
was patched, basically, to enable the target mode and provide all
necessary callbacks, and it's still able to work as initiator only.
Mode, when a host acts as the initiator and the target simultaneously,
is also supported. This driver is going to be obsolete soon in favor of
2.6-based driver (see above).
The latest version is 0.9.3.4. Requires Linux kernel versions 2.4.20 or
higher and SCST version 0.9.3-pre4 or higher. If you are lucky, it
works also on 2.6 kernels, see README file
for details. Tested on i386 only, but
should work on any other supported by Linux platform.
Target drivers for Adaptec 7xxx, LSI/MPT and Qlogic QLA12xx
Target drivers for Adaptec 7xxx, LSI/MPT and Qlogic QLA12xx cards have
being developed by Hu Gang and they available for download from http://bj.soulinfo.com/~hugang/scst/tgt/.
These drivers are not completed, but looks to be a good starting point
if you are going to use one of these cards.
SCST team don't have the appropriate hardware, therefore have not
tested and don't support these drivers. Send all questions to Hu Gang
% soulinfo.com>. If some of these drivers don't compile for you, try
again with SCST version 0.9.3-pre2.
Patches for UNH-iSCSI Target 1.5.03 and 1.6.00 to work over
SCST is much more advanced, than the internal mid-level of UNH-iSCSI target
With SCST the iSCSI target benefits from all its features and gets
ability to use all its advantages, like high performance and
scalability, SMP support, required SCSI functionality emulation, etc.
Since the interface between SCST and the target drivers is based on
work, done by UNH IOL, it was relatively simple to update UNH-iSCSI
target to work over SCST. Mostly it was "search and replace" job. The
built-in scsi_target remains available as a compile-time option.
Requires Linux kernel versions 2.4.20 or
higher or 2.6.7 or higher and SCST version 0.9.2 or higher.