1 |
1275 |
phoenix |
This driver is for Compaq's SMART Array Controllers.
|
2 |
|
|
|
3 |
|
|
Supported Cards:
|
4 |
|
|
----------------
|
5 |
|
|
|
6 |
|
|
This driver is known to work with the following cards:
|
7 |
|
|
|
8 |
|
|
* SA 5300
|
9 |
|
|
* SA 5i
|
10 |
|
|
* SA 532
|
11 |
|
|
* SA 5312
|
12 |
|
|
* SA 641
|
13 |
|
|
* SA 642
|
14 |
|
|
* SA 6400
|
15 |
|
|
* SA 6400 U320 Expansion Module
|
16 |
|
|
* SA 6i
|
17 |
|
|
|
18 |
|
|
If nodes are not already created in the /dev/cciss directory
|
19 |
|
|
|
20 |
|
|
# mkdev.cciss [ctlrs]
|
21 |
|
|
|
22 |
|
|
Where ctlrs is the number of controllers you have (defaults to 1 if not
|
23 |
|
|
specified).
|
24 |
|
|
|
25 |
|
|
Device Naming:
|
26 |
|
|
--------------
|
27 |
|
|
|
28 |
|
|
You need some entries in /dev for the cciss device. The mkdev.cciss script
|
29 |
|
|
can make device nodes for you automatically. Currently the device setup
|
30 |
|
|
is as follows:
|
31 |
|
|
|
32 |
|
|
Major numbers:
|
33 |
|
|
104 cciss0
|
34 |
|
|
105 cciss1
|
35 |
|
|
106 cciss2
|
36 |
|
|
etc...
|
37 |
|
|
|
38 |
|
|
Minor numbers:
|
39 |
|
|
b7 b6 b5 b4 b3 b2 b1 b0
|
40 |
|
|
|----+----| |----+----|
|
41 |
|
|
| |
|
42 |
|
|
| +-------- Partition ID (0=wholedev, 1-15 partition)
|
43 |
|
|
|
|
44 |
|
|
+-------------------- Logical Volume number
|
45 |
|
|
|
46 |
|
|
The suggested device naming scheme is:
|
47 |
|
|
/dev/cciss/c0d0 Controller 0, disk 0, whole device
|
48 |
|
|
/dev/cciss/c0d0p1 Controller 0, disk 0, partition 1
|
49 |
|
|
/dev/cciss/c0d0p2 Controller 0, disk 0, partition 2
|
50 |
|
|
/dev/cciss/c0d0p3 Controller 0, disk 0, partition 3
|
51 |
|
|
|
52 |
|
|
/dev/cciss/c1d1 Controller 1, disk 1, whole device
|
53 |
|
|
/dev/cciss/c1d1p1 Controller 1, disk 1, partition 1
|
54 |
|
|
/dev/cciss/c1d1p2 Controller 1, disk 1, partition 2
|
55 |
|
|
/dev/cciss/c1d1p3 Controller 1, disk 1, partition 3
|
56 |
|
|
|
57 |
|
|
Support for more than 8 controllers
|
58 |
|
|
-----------------------------------
|
59 |
|
|
Originally the driver only supports 8 controllers in the system,
|
60 |
|
|
and this is due to the major numbers assigned to the driver
|
61 |
|
|
(104 thru 111).
|
62 |
|
|
|
63 |
|
|
The driver can now support up to 32 controllers in the system.
|
64 |
|
|
|
65 |
|
|
For the ninth controller and beyond, the major numbers will be
|
66 |
|
|
assigned dynamically by the kernel when it is discovered,
|
67 |
|
|
and there is no guarantee what the major number you will get,
|
68 |
|
|
but most likely it will start from 254 and goes down from there.
|
69 |
|
|
|
70 |
|
|
You can check the assigned major numbers by typing
|
71 |
|
|
cat /proc/devices
|
72 |
|
|
And look for cciss controllers
|
73 |
|
|
|
74 |
|
|
Once you have this, you need to create device nodes in
|
75 |
|
|
/dev/cciss directory. The nodes for the first 8 controllers
|
76 |
|
|
should already be created by mkdev.cciss script or
|
77 |
|
|
/etc/makedev.d/cciss script. You can add the major number(s)
|
78 |
|
|
in those scripts, or create the nodes manually by using
|
79 |
|
|
the mknod command.
|
80 |
|
|
|
81 |
|
|
You can also use mknod_dyn.cciss and rmnod_dyn.cciss scripts
|
82 |
|
|
to create or remove nodes easily. These scripts can be found
|
83 |
|
|
in the Documentation directory.
|
84 |
|
|
|
85 |
|
|
Then you can mount the devices and create partitions
|
86 |
|
|
(You also need to make nodes for these partitions).
|
87 |
|
|
|
88 |
|
|
As for the minor number, the disk device will have a minor
|
89 |
|
|
number divisible by 16 (e.g: 0, 16, 32 etc), and the
|
90 |
|
|
partitions on those disk devices will have the minor number
|
91 |
|
|
of the disk device plus the partition number (1-15).
|
92 |
|
|
For example, disk d2 will have minor number 32, and its
|
93 |
|
|
partitions 1 and 2 will have minor numbers 33 and 34.
|
94 |
|
|
|
95 |
|
|
Look at the mkdev.cciss script for example.
|
96 |
|
|
|
97 |
|
|
Note:
|
98 |
|
|
In 2.4 kernel, partition names are hard coded in
|
99 |
|
|
/usr/src/linux/fs/partitions/check.c
|
100 |
|
|
and only for the first 8 cciss controllers. The rest
|
101 |
|
|
will be reported as ccissXX. This should not affect
|
102 |
|
|
I/O operation or performance. Please apply the
|
103 |
|
|
cciss_2.4_partition_name.patch to address this. This
|
104 |
|
|
will not be an issue under 2.5 kernel, since partition
|
105 |
|
|
names will be handled by the driver.
|
106 |
|
|
|
107 |
|
|
SCSI tape drive and medium changer support
|
108 |
|
|
------------------------------------------
|
109 |
|
|
|
110 |
|
|
SCSI sequential access devices and medium changer devices are supported and
|
111 |
|
|
appropriate device nodes are automatically created. (e.g.
|
112 |
|
|
/dev/st0, /dev/st1, etc. See the "st" man page for more details.)
|
113 |
|
|
You must enable "SCSI tape drive support for Smart Array 5xxx" and
|
114 |
|
|
"SCSI support" in your kernel configuration to be able to use SCSI
|
115 |
|
|
tape drives with your Smart Array 5xxx controller.
|
116 |
|
|
|
117 |
|
|
Additionally, note that the driver will not engage the SCSI core at init
|
118 |
|
|
time. The driver must be directed to dynamically engage the SCSI core via
|
119 |
|
|
the /proc filesystem entry which the "block" side of the driver creates as
|
120 |
|
|
/proc/driver/cciss/cciss* at runtime. This is because at driver init time,
|
121 |
|
|
the SCSI core may not yet be initialized (because the driver is a block
|
122 |
|
|
driver) and attempting to register it with the SCSI core in such a case
|
123 |
|
|
would cause a hang. This is best done via an initialization script
|
124 |
|
|
(typically in /etc/init.d, but could vary depending on distibution).
|
125 |
|
|
For example:
|
126 |
|
|
|
127 |
|
|
for x in /proc/driver/cciss/cciss[0-9]*
|
128 |
|
|
do
|
129 |
|
|
echo "engage scsi" > $x
|
130 |
|
|
done
|
131 |
|
|
|
132 |
|
|
Once the SCSI core is engaged by the driver, it cannot be disengaged
|
133 |
|
|
(except by unloading the driver, if it happens to be linked as a module.)
|
134 |
|
|
|
135 |
|
|
Note also that if no sequential access devices or medium changers are
|
136 |
|
|
detected, the SCSI core will not be engaged by the action of the above
|
137 |
|
|
script.
|
138 |
|
|
|
139 |
|
|
Hot plug support for SCSI tape drives
|
140 |
|
|
-------------------------------------
|
141 |
|
|
|
142 |
|
|
Hot plugging of SCSI tape drives is supported, with some caveats.
|
143 |
|
|
The cciss driver must be informed that changes to the SCSI bus
|
144 |
|
|
have been made, in addition to and prior to informing the SCSI
|
145 |
|
|
mid layer. This may be done via the /proc filesystem. For example:
|
146 |
|
|
|
147 |
|
|
echo "rescan" > /proc/scsi/cciss0/1
|
148 |
|
|
|
149 |
|
|
This causes the adapter to query the adapter about changes to the
|
150 |
|
|
physical SCSI buses and/or fibre channel arbitrated loop and the
|
151 |
|
|
driver to make note of any new or removed sequential access devices
|
152 |
|
|
or medium changers. The driver will output messages indicating what
|
153 |
|
|
devices have been added or removed and the controller, bus, target and
|
154 |
|
|
lun used to address the device. Once this is done, the SCSI mid layer
|
155 |
|
|
can be informed of changes to the virtual SCSI bus which the driver
|
156 |
|
|
presents to it in the usual way. For example:
|
157 |
|
|
|
158 |
|
|
echo scsi add-single-device 3 2 1 0 > /proc/scsi/scsi
|
159 |
|
|
|
160 |
|
|
to add a device on controller 3, bus 2, target 1, lun 0. Note that
|
161 |
|
|
the driver makes an effort to preserve the devices positions
|
162 |
|
|
in the virtual SCSI bus, so if you are only moving tape drives
|
163 |
|
|
around on the same adapter and not adding or removing tape drives
|
164 |
|
|
from the adapter, informing the SCSI mid layer may not be necessary.
|
165 |
|
|
|
166 |
|
|
Note that the naming convention of the /proc filesystem entries
|
167 |
|
|
contains a number in addition to the driver name. (E.g. "cciss0"
|
168 |
|
|
instead of just "cciss" which you might expect.) This is because
|
169 |
|
|
of changes to the 2.4 kernel PCI interface related to PCI hot plug
|
170 |
|
|
that imply the driver must register with the SCSI mid layer once per
|
171 |
|
|
adapter instance rather than once per driver.
|
172 |
|
|
|
173 |
|
|
Note: ONLY sequential access devices and medium changers are presented
|
174 |
|
|
as SCSI devices to the SCSI mid layer by the cciss driver. Specifically,
|
175 |
|
|
physical SCSI disk drives are NOT presented to the SCSI mid layer. The
|
176 |
|
|
physical SCSI disk drives are controlled directly by the array controller
|
177 |
|
|
hardware and it is important to prevent the OS from attempting to directly
|
178 |
|
|
access these devices too, as if the array controller were merely a SCSI
|
179 |
|
|
controller in the same way that we are allowing it to access SCSI tape drives.
|
180 |
|
|
|
181 |
|
|
Monitor Threads
|
182 |
|
|
---------------
|
183 |
|
|
|
184 |
|
|
For multipath configurations (acheived via a higher level driver, such
|
185 |
|
|
as the "md" driver) it is important that failure of a controller is detected.
|
186 |
|
|
Ordinarily, the driver is entirely interrupt driven. If a failure occurs
|
187 |
|
|
in such a way that the processor cannot receive interrupts from an adapter,
|
188 |
|
|
the driver will wait forever for i/o's to complete. In a multipath
|
189 |
|
|
configuration this is undesirable, as the md driver relies on i/o's being
|
190 |
|
|
reported as failed by the low level driver to trigger failing over to an
|
191 |
|
|
alternate controller. The monitor threads allow the driver to detect such
|
192 |
|
|
situations and report outstanding i/o's as having failed so that recovery
|
193 |
|
|
actions such switching to an alternate controller can occur. The monitor
|
194 |
|
|
threads periodically sends a trivial "no-operation" command down to
|
195 |
|
|
the controllers and expect them to complete within a a reasonable (short)
|
196 |
|
|
time period. The firmware on the adapter is designed such that no matter
|
197 |
|
|
how busy the adapter is serving i/o, it can respond quickly to a
|
198 |
|
|
"no-operation" command. In the event that a deadline elapses before a no
|
199 |
|
|
operation command completes, all outstanding commands on that controller
|
200 |
|
|
are reported back to the upper layers as having failed, and any new commands
|
201 |
|
|
sent to the controller are immediately reported back as failed.
|
202 |
|
|
|
203 |
|
|
To enable the monitor threads, the compile time option must be enabled
|
204 |
|
|
(via the usual linux kernel configuration) and the monitor thread must
|
205 |
|
|
be enabled at runtime as well. A system may have many adapters, but
|
206 |
|
|
perhaps only a single pair operating in a multipath configuration.
|
207 |
|
|
In this way, it is possible to run monitoring threads only for those
|
208 |
|
|
adapters which require it.
|
209 |
|
|
|
210 |
|
|
To start a monitoring thread on the first cciss adapter, "cciss0" with
|
211 |
|
|
a polling interval of 30 seconds, execute the following command:
|
212 |
|
|
|
213 |
|
|
echo "monitor 30" > /proc/driver/cciss/cciss0
|
214 |
|
|
|
215 |
|
|
To change the polling interval, to say, 60 seconds:
|
216 |
|
|
|
217 |
|
|
echo "monitor 60" > /proc/driver/cciss/cciss0
|
218 |
|
|
|
219 |
|
|
(Note, the change will not take effect until the previous polling
|
220 |
|
|
interval elapses.)
|
221 |
|
|
|
222 |
|
|
To disable the monitoring thread, set the polling interval to 0 seconds:
|
223 |
|
|
|
224 |
|
|
echo "monitor 0" > /proc/driver/cciss/cciss0
|
225 |
|
|
|
226 |
|
|
(Again, the monitoring thread will not exit until the previous polling
|
227 |
|
|
interval elapses.)
|
228 |
|
|
|
229 |
|
|
The minimum monitoring period is 10 seconds, and the maximum monitoring
|
230 |
|
|
period is 3600 seconds (1 hour). The no-operation command must complete
|
231 |
|
|
with 5 seconds of submission in all cases or the controller will be presumed
|
232 |
|
|
failed.
|