| .\" Copyright (C) 2011, Hewlett-Packard Development Company, L.P. |
| .\" Written by Stephen M. Cameron <scameron@beardog.cce.hp.com> |
| .\" |
| .\" %%%LICENSE_START(GPLv2_ONELINE) |
| .\" Licensed under GNU General Public License version 2 (GPLv2) |
| .\" %%%LICENSE_END |
| .\" |
| .\" shorthand for double quote that works everywhere. |
| .ds q \N'34' |
| .TH CCISS 4 2017-09-15 "Linux" "Linux Programmer's Manual" |
| .SH NAME |
| cciss \- HP Smart Array block driver |
| .SH SYNOPSIS |
| .nf |
| modprobe cciss [ cciss_allow_hpsa=1 ] |
| .fi |
| .SH DESCRIPTION |
| .\" commit 253d2464df446456c0bba5ed4137a7be0b278aa8 |
| .BR Note : |
| This obsolete driver was removed from the kernel in version 4.14, |
| as it is superseded by the |
| .BR hpsa (4) |
| driver in newer kernels. |
| .PP |
| .B cciss |
| is a block driver for older HP Smart Array RAID controllers. |
| .SS Options |
| .IR "cciss_allow_hpsa=1" : |
| This option prevents the |
| .B cciss |
| driver from attempting to drive any controllers that the |
| .BR hpsa (4) |
| driver is capable of controlling, which is to say, the |
| .B cciss |
| driver is restricted by this option to the following controllers: |
| .PP |
| .nf |
| Smart Array 5300 |
| Smart Array 5i |
| Smart Array 532 |
| Smart Array 5312 |
| Smart Array 641 |
| Smart Array 642 |
| Smart Array 6400 |
| Smart Array 6400 EM |
| Smart Array 6i |
| Smart Array P600 |
| Smart Array P400i |
| Smart Array E200i |
| Smart Array E200 |
| Smart Array E200i |
| Smart Array E200i |
| Smart Array E200i |
| Smart Array E500 |
| .fi |
| .SS Supported hardware |
| The |
| .B cciss |
| driver supports the following Smart Array boards: |
| .PP |
| .nf |
| Smart Array 5300 |
| Smart Array 5i |
| Smart Array 532 |
| Smart Array 5312 |
| Smart Array 641 |
| Smart Array 642 |
| Smart Array 6400 |
| Smart Array 6400 U320 Expansion Module |
| Smart Array 6i |
| Smart Array P600 |
| Smart Array P800 |
| Smart Array E400 |
| Smart Array P400i |
| Smart Array E200 |
| Smart Array E200i |
| Smart Array E500 |
| Smart Array P700m |
| Smart Array P212 |
| Smart Array P410 |
| Smart Array P410i |
| Smart Array P411 |
| Smart Array P812 |
| Smart Array P712m |
| Smart Array P711m |
| .fi |
| .SS Configuration details |
| To configure HP Smart Array controllers, |
| use the HP Array Configuration Utility |
| (either |
| .BR hpacuxe (8) |
| or |
| .BR hpacucli (8)) |
| or the Offline ROM-based Configuration Utility (ORCA) |
| run from the Smart Array's option ROM at boot time. |
| .SH FILES |
| .SS Device nodes |
| The device naming scheme is as follows: |
| .PP |
| .nf |
| Major numbers: |
| .PP |
| 104 cciss0 |
| 105 cciss1 |
| 106 cciss2 |
| 105 cciss3 |
| 108 cciss4 |
| 109 cciss5 |
| 110 cciss6 |
| 111 cciss7 |
| .PP |
| Minor numbers: |
| .PP |
| b7 b6 b5 b4 b3 b2 b1 b0 |
| |----+----| |----+----| |
| | | |
| | +-------- Partition ID (0=wholedev, 1\-15 partition) |
| | |
| +-------------------- Logical Volume number |
| .PP |
| The device naming scheme is: |
| .PP |
| /dev/cciss/c0d0 Controller 0, disk 0, whole device |
| /dev/cciss/c0d0p1 Controller 0, disk 0, partition 1 |
| /dev/cciss/c0d0p2 Controller 0, disk 0, partition 2 |
| /dev/cciss/c0d0p3 Controller 0, disk 0, partition 3 |
| .PP |
| /dev/cciss/c1d1 Controller 1, disk 1, whole device |
| /dev/cciss/c1d1p1 Controller 1, disk 1, partition 1 |
| /dev/cciss/c1d1p2 Controller 1, disk 1, partition 2 |
| /dev/cciss/c1d1p3 Controller 1, disk 1, partition 3 |
| .fi |
| .SS Files in /proc |
| The files |
| .I /proc/driver/cciss/cciss[0\-9]+ |
| contain information about |
| the configuration of each controller. |
| For example: |
| .PP |
| .in +4n |
| .EX |
| $ \fBcd /proc/driver/cciss\fP |
| $ \fBls -l\fP |
| total 0 |
| -rw-r--r-- 1 root root 0 2010\-09\-10 10:38 cciss0 |
| -rw-r--r-- 1 root root 0 2010\-09\-10 10:38 cciss1 |
| -rw-r--r-- 1 root root 0 2010\-09\-10 10:38 cciss2 |
| $ \fBcat cciss2\fP |
| cciss2: HP Smart Array P800 Controller |
| Board ID: 0x3223103c |
| Firmware Version: 7.14 |
| IRQ: 16 |
| Logical drives: 1 |
| Current Q depth: 0 |
| Current # commands on controller: 0 |
| Max Q depth since init: 1 |
| Max # commands on controller since init: 2 |
| Max SG entries since init: 32 |
| Sequential access devices: 0 |
| |
| cciss/c2d0: 36.38GB RAID 0 |
| .EE |
| .in |
| .\" |
| .SS Files in /sys |
| .TP |
| .I /sys/bus/pci/devices/<dev>/ccissX/cXdY/model |
| Displays the SCSI INQUIRY page 0 model for logical drive |
| .I Y |
| of controller |
| .IR X . |
| .TP |
| .I /sys/bus/pci/devices/<dev>/ccissX/cXdY/rev |
| Displays the SCSI INQUIRY page 0 revision for logical drive |
| .I Y |
| of controller |
| .IR X . |
| .TP |
| .I /sys/bus/pci/devices/<dev>/ccissX/cXdY/unique_id |
| Displays the SCSI INQUIRY page 83 serial number for logical drive |
| .I Y |
| of controller |
| .IR X . |
| .TP |
| .I /sys/bus/pci/devices/<dev>/ccissX/cXdY/vendor |
| Displays the SCSI INQUIRY page 0 vendor for logical drive |
| .I Y |
| of controller |
| .IR X . |
| .TP |
| .I /sys/bus/pci/devices/<dev>/ccissX/cXdY/block:cciss!cXdY |
| A symbolic link to |
| .IR /sys/block/cciss!cXdY . |
| .TP |
| .I /sys/bus/pci/devices/<dev>/ccissX/rescan |
| When this file is written to, the driver rescans the controller |
| to discover any new, removed, or modified logical drives. |
| .TP |
| .I /sys/bus/pci/devices/<dev>/ccissX/resettable |
| A value of 1 displayed in this file indicates that |
| the "reset_devices=1" kernel parameter (used by |
| .BR kdump ) |
| is honored by this controller. |
| A value of 0 indicates that the |
| "reset_devices=1" kernel parameter will not be honored. |
| Some models of Smart Array are not able to honor this parameter. |
| .TP |
| .I /sys/bus/pci/devices/<dev>/ccissX/cXdY/lunid |
| Displays the 8-byte LUN ID used to address logical drive |
| .I Y |
| of controller |
| .IR X . |
| .TP |
| .I /sys/bus/pci/devices/<dev>/ccissX/cXdY/raid_level |
| Displays the RAID level of logical drive |
| .I Y |
| of controller |
| .IR X . |
| .TP |
| .I /sys/bus/pci/devices/<dev>/ccissX/cXdY/usage_count |
| Displays the usage count (number of opens) of logical drive |
| .I Y |
| of controller |
| .IR X . |
| .SS SCSI tape drive and medium changer support |
| SCSI sequential access devices and medium changer devices are supported and |
| appropriate device nodes are automatically created (e.g., |
| .IR /dev/st0 , |
| .IR /dev/st1 , |
| etc.; see |
| .BR st (4) |
| for more details.) |
| You must enable "SCSI tape drive support for Smart Array 5xxx" and |
| "SCSI support" in your kernel configuration to be able to use SCSI |
| tape drives with your Smart Array 5xxx controller. |
| .PP |
| Additionally, note that the driver will not engage the SCSI core at |
| init time. |
| The driver must be directed to dynamically engage the SCSI core via the |
| .I /proc |
| filesystem entry, |
| which the "block" side of the driver creates as |
| .I /proc/driver/cciss/cciss* |
| at run time. |
| This is because at driver init time, |
| the SCSI core may not yet be initialized (because the driver is a block |
| driver) and attempting to register it with the SCSI core in such a case |
| would cause a hang. |
| This is best done via an initialization script |
| (typically in |
| .IR /etc/init.d , |
| but could vary depending on distribution). |
| For example: |
| .PP |
| .in +4n |
| .EX |
| for x in /proc/driver/cciss/cciss[0\-9]* |
| do |
| echo "engage scsi" > $x |
| done |
| .EE |
| .in |
| .PP |
| Once the SCSI core is engaged by the driver, it cannot be disengaged |
| (except by unloading the driver, if it happens to be linked as a module.) |
| .PP |
| Note also that if no sequential access devices or medium changers are |
| detected, the SCSI core will not be engaged by the action of the above |
| script. |
| .SS Hot plug support for SCSI tape drives |
| Hot plugging of SCSI tape drives is supported, with some caveats. |
| The |
| .B cciss |
| driver must be informed that changes to the SCSI bus |
| have been made. |
| This may be done via the |
| .I /proc |
| filesystem. |
| For example: |
| .PP |
| echo "rescan" > /proc/scsi/cciss0/1 |
| .PP |
| This causes the driver to: |
| .RS |
| .IP 1. 3 |
| query the adapter about changes to the |
| physical SCSI buses and/or fibre channel arbitrated loop, and |
| .IP 2. |
| make note of any new or removed sequential access devices |
| or medium changers. |
| .RE |
| .PP |
| The driver will output messages indicating which |
| devices have been added or removed and the controller, bus, target, and |
| lun used to address each device. |
| The driver then notifies the SCSI midlayer |
| of these changes. |
| .PP |
| Note that the naming convention of the |
| .I /proc |
| filesystem entries |
| contains a number in addition to the driver name |
| (e.g., "cciss0" |
| instead of just "cciss", which you might expect). |
| .PP |
| Note: |
| .I Only |
| sequential access devices and medium changers are presented |
| as SCSI devices to the SCSI midlayer by the |
| .B cciss |
| driver. |
| Specifically, physical SCSI disk drives are |
| .I not |
| presented to the SCSI midlayer. |
| The only disk devices that are presented to the kernel are logical |
| drives that the array controller constructs from regions on |
| the physical drives. |
| The logical drives are presented to the block layer |
| (not to the SCSI midlayer). |
| It is important for the driver to prevent the kernel from accessing the |
| physical drives directly, since these drives are used by the array |
| controller to construct the logical drives. |
| .SS SCSI error handling for tape drives and medium changers |
| The Linux SCSI midlayer provides an error-handling protocol that |
| is initiated whenever a SCSI command fails to complete within a |
| certain amount of time (which can vary depending on the command). |
| The |
| .B cciss |
| driver participates in this protocol to some extent. |
| The normal protocol is a four-step process: |
| .IP * 3 |
| First, the device is told to abort the command. |
| .IP * |
| If that doesn't work, the device is reset. |
| .IP * |
| If that doesn't work, the SCSI bus is reset. |
| .IP * |
| If that doesn't work, the host bus adapter is reset. |
| .PP |
| The |
| .B cciss |
| driver is a block |
| driver as well as a SCSI driver and only the tape drives and medium |
| changers are presented to the SCSI midlayer. |
| Furthermore, unlike more |
| straightforward SCSI drivers, disk I/O continues through the block |
| side during the SCSI error-recovery process. |
| Therefore, the |
| .B cciss |
| driver implements only the first two of these actions, |
| aborting the command, and resetting the device. |
| Note also that most tape drives will not oblige |
| in aborting commands, and sometimes it appears they will not even |
| obey a reset command, though in most circumstances they will. |
| If the command cannot be aborted and the device cannot be |
| reset, the device will be set offline. |
| .PP |
| In the event that the error-handling code is triggered and a tape drive is |
| successfully reset or the tardy command is successfully aborted, the |
| tape drive may still not allow I/O to continue until some command |
| is issued that positions the tape to a known position. |
| Typically you must rewind the tape (by issuing |
| .I "mt -f /dev/st0 rewind" |
| for example) before I/O can proceed again to a tape drive that was reset. |
| .SH SEE ALSO |
| .BR hpsa (4), |
| .BR cciss_vol_status (8), |
| .BR hpacucli (8), |
| .BR hpacuxe (8) |
| .PP |
| .UR http://cciss.sf.net |
| .UE , |
| and |
| .I Documentation/blockdev/cciss.txt |
| and |
| .I Documentation/ABI/testing/sysfs-bus-pci-devices-cciss |
| in the Linux kernel source tree |
| .\" .SH AUTHORS |
| .\" Don Brace, Steve Cameron, Chase Maupin, Mike Miller, Michael Ni, |
| .\" Charles White, Francis Wiran |
| .\" and probably some other people. |