7e47ccab64892eed5519ea8fe0397ad599080f5a
[mirror/scst/.git] / iscsi-scst / README
1 iSCSI SCST target driver
2 ========================
3
4 Version 2.0.0, XX XXXXX 2010
5 ----------------------------
6
7 ISCSI-SCST is a deeply reworked fork of iSCSI Enterprise Target (IET)
8 (http://iscsitarget.sourceforge.net). Reasons of the fork were:
9
10  - To be able to use full power of SCST core.
11
12  - To fix all the problems, corner cases issues and iSCSI standard
13    violations which IET has.
14
15 See more info at http://scst.sourceforge.net/target_iscsi.html.
16
17 This version is compatible with SCST version 2.0.0 and higher.
18
19
20 Installation if your Linux kernel already has iSCSI-SCST built-in
21 -----------------------------------------------------------------
22
23 Simply run "make all", then "make install".
24
25
26 Installation out of Linux kernel tree
27 -------------------------------------
28
29 See HOWTOs in the doc/ subdirectory.
30
31 Only vanilla kernels from kernel.org and RHEL/CentOS 5.2 kernels are
32 supported, but it should work on other (vendors') kernels, if you manage
33 to successfully compile on them. The main problem with vendor's kernels
34 is that they often contain patches, which will appear only in the next
35 version of the vanilla kernel, therefore it's quite hard to track such
36 changes. Thus, if during compilation for some vendor's kernel your
37 compiler complains about redefinition of some symbol, you should either
38 switch to vanilla kernel, or add or change as necessary the
39 corresponding to that symbol "#if LINUX_VERSION_CODE" statement.
40
41 If during compilation you see message like "*** No rule to make target
42 `xxx.h', needed by `yyy.o'.  Stop.", then your autogenerated
43 dependencies don't match your compiler configuration anymore. You should
44 run "make extraclean" to remove them. On the next compilation they will
45 be regenerated.
46
47 If you experience problems during kernel module load or running, check
48 your system and/or kernel logs (or run dmesg command for the few most
49 recent kernel messages).
50
51 To use full power of TCP zero-copy transmit functions, especially
52 dealing with user space supplied via scst_user module memory, iSCSI-SCST
53 needs to be notified when Linux networking finished data transmission.
54 For that you should enable CONFIG_TCP_ZERO_COPY_TRANSFER_COMPLETION_NOTIFICATION
55 kernel config option. This is highly recommended, but not required.
56 Basically, iSCSI-SCST works fine with an unpatched Linux kernel with the
57 same or better speed as other open source iSCSI targets, including IET,
58 but if you want even better performance you have to patch and rebuild
59 the kernel. Without CONFIG_TCP_ZERO_COPY_TRANSFER_COMPLETION_NOTIFICATION
60 enabled you will just revert to the original behavior of other open
61 source iSCSI targets, when for data transmission:
62
63  - For in-kernel allocated memory (scst_vdisk and pass-through
64    handlers) usage of SGV cache on transmit path (READ-type commands)
65    will be disabled, but data will still be sent in zero-copy manner.
66
67  - For user space allocated memory (scst_user handler) all transmitted
68    data will be additionally copied into temporary TCP buffers. The
69    performance hit will be quite noticeable.
70
71 Note, that if your network hardware does not support TX offload
72 functions or has them disabled, then TCP zero-copy transmit functions on
73 your system will not be used by Linux networking in any case, so
74 put_page_callback patch will not be able to improve performance for you.
75 You can check your network hardware offload capabilities by command
76 "ethtool -k ethX", where X is the network device number. At least
77 "tx-checksumming" and "scatter-gather" should be enabled.
78
79 If you have in your kernel log error messages like:
80
81 iscsi-scst: ***ERROR*** net_priv isn't NULL and != ref_cmd
82
83 with the corresponding kernel BUG dump, then put_page_callback patch you
84 use isn't sufficient for your kernel. This might be because the kernel
85 you use has some additional patches applied, which affect the
86 functionality, which put_page_callback patch provides. For example,
87 Fedora or Gentoo use kernels, which, although have version number like
88 2.6.18, are greatly differ from the "vanilla" kernel 2.6.18,
89 maintained by Linus Torvalds for that the put_page_callback patch was
90 created. In this case I would recommend you either:
91
92  - Search net/ in your kernel source for "put_page" and "get_page" functions.
93    If you find any in some place, except in net/sunrpc/svc.c and
94    net/core/pktgen.c, then, most likely, you found the reason of your
95    problem. Replace them by "net_put_page" and "net_get_page"
96    correspondingly and try again. If the problem is solved, then please
97    prepare a new put_page_callback patch and send it to the SCST mailing
98    list scst-devel@lists.sourceforge.net.
99
100 or
101
102  - Unapply this patch and use iSCSI-SCST without it. Also report this
103    problem to the SCST mailing list scst-devel@lists.sourceforge.net.
104
105
106 Usage
107 -----
108
109 See HOWTOs in the doc/ subdirectory.
110
111 In 2.0.0 usage of iscsi-scstd.conf as well as iscsi-scst-adm is
112 obsolete. Use the sysfs interface facilities instead.
113
114 It is recommended to use TEST UNIT READY ("tur") command to check if
115 iSCSI-SCST target is alive.
116
117 IMPORTANT: In the procfs build all LUN information (access control)
118 =========  MUST be configured BEFORE iscsi-scstd started!
119
120 Also see SCST README file how to tune for the best performance.
121
122 CAUTION: Working of target and initiator on the same host isn't fully
123 =======  supported. See SCST README file for details.
124
125
126 Sysfs interface
127 ---------------
128
129 Starting from 2.0.0 iSCSI-SCST has sysfs interface. You can switch to it
130 by running "make disable_proc". To switch back to the procfs interface
131 you should run "make enable_proc". The procfs interface from version
132 2.0.0 is obsolete and will be removed in one of the next versions.
133
134 Root of SCST sysfs interface is /sys/kernel/scst_tgt. Root of iSCSI-SCST
135 is /sys/kernel/scst_tgt/targets/iscsi. It has the following entries:
136
137  - None, one or more subdirectories for targets with name equal to names
138    of the corresponding targets.
139  
140  - IncomingUser[num] - optional one or more attributes containing user
141    name and password for incoming discovery user name. Not exist by
142    default and can be added through "mgmt" entry, see below.
143
144  - OutgoingUser - optional attribute containing user name and password
145    for outgoing discovery user name. Not exist by default and can be
146    added through "mgmt" entry, see below.
147
148  - iSNSServer - contains name or IP address of iSNS server with optional
149    "AccessControl" attribute, which allows to enable iSNS access
150    control. Empty by default.
151
152  - enabled - using this attribute you can enable or disable iSCSI-SCST
153    accept new connections. It allows to finish configuring global
154    iSCSI-SCST attributes before it starts accepting new connections. 0
155    by default.
156
157  - open_state - read-only attribute, which allows to see if the user
158    space part of iSCSI-SCST connected to the kernel part.
159
160  - trace_level - allows to enable and disable various tracing
161    facilities. See content of this file for help how to use it.
162
163  - version - read-only attribute, which allows to see version of
164    iSCSI-SCST and enabled optional features.
165
166  - mgmt - main management entry, which allows to configure iSCSI-SCST.
167    Namely, add/delete targets as well as add/delete optional global and
168    per-target attributes. See content of this file for help how to use
169    it.
170
171 Each iSCSI-SCST attribute can contain in the last line mark "[key]". It
172 is automatically added mark used to allow scstadmin to see which
173 attributes it should save in the config file. You can ignore it.
174
175 Each target subdirectory contains the following entries:
176
177  - ini_group - subdirectory defining initiator groups for this target,
178    used to define per-initiator access control. See SCST core README for
179    more details.
180  
181  - luns - subdirectory defining LUNs of this target. See SCST core
182    README for more details.
183  
184  - sessions - subdirectory containing connected to this target sessions.
185  
186  - IncomingUser[num] - optional one or more attributes containing user
187    name and password for incoming user name. Not exist by default and can
188    be added through the "mgmt" entry, see above.
189
190  - OutgoingUser - optional attribute containing user name and password
191    for outgoing user name. Not exist by default and can be added through
192    the "mgmt" entry, see above.
193
194  - Entries defining default iSCSI parameters values used during iSCSI
195    parameters negotiation.
196
197  - QueuedCommands - defines maximum number of commands queued to any
198    session of this target.
199
200  - enabled - using this attribute you can enable or disable iSCSI-SCST
201    accept new connections to this target. It allows to finish
202    configuring it before it starts accepting new connections. 0 by
203    default.
204
205  - tid - TID of this target.
206
207 Subdirectory "sessions" contains one subdirectory for each connected
208 session with name equal to name of the connected initiator.
209
210 Each session subdirectory contains the following entries:
211
212  - One subdirectory for each TCP connection in this session. ISCSI-SCST
213    supports 1 connection per session, but the session subdirectory can
214    contain several connections: one active and other being closed.
215    
216  - Entries defining negotiated iSCSI parameters.
217
218  - initiator_name - contains initiator name
219  
220  - sid - contains SID of this session
221  
222  - reinstating - contains reinstatement state of this session
223  
224  - force_close - write-only attribute, which allows to force close this
225    session. This is the only writable session attribute.
226    
227  - active_commands - contains number of active, i.e. not yet or being
228    executed, SCSI commands in this session.
229    
230  - commands - contains overall number of SCSI commands in this session.
231
232 Each connection subdirectory contains the following entries:
233
234  - cid - contains CID of this connection.
235  
236  - ip - contains IP address of the connected initiator.
237  
238  - state - contains processing state of this connection.
239  
240 Below is a sample script, which configures 1 virtual disk "disk1" using
241 /disk1 image and one target iqn.2006-10.net.vlnb:tgt with all default
242 parameters:
243
244 #!/bin/bash
245
246 modprobe scst
247 modprobe scst_vdisk
248
249 echo "open disk1 /disk1 NV_CACHE" >/sys/kernel/scst_tgt/handlers/vdisk_fileio/mgmt
250
251 service iscsi-scst start
252
253 echo "add_target iqn.2006-10.net.vlnb:tgt" >/sys/kernel/scst_tgt/targets/iscsi/mgmt
254
255 echo "add disk1 0" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt/luns/mgmt
256
257 echo 1 >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt/enabled
258 echo 1 >/sys/kernel/scst_tgt/targets/iscsi/enabled
259
260
261 Below is more advanced sample script, which configures more virtual
262 devices of various types, including virtual CDROM and 2 targets, one
263 with all default parameters, another one with some not default
264 parameters, incoming and outgoing user names for CHAP authentification,
265 and special permissions for initiator iqn.2005-03.org.open-iscsi:cacdcd2520,
266 which will see another set of devices. Also this sample configures CHAP
267 authentication for discovery sessions and iSNS server with access control.
268
269 #!/bin/bash
270
271 modprobe scst
272 modprobe scst_vdisk
273
274 echo "open disk1 /disk1 NV_CACHE" >/sys/kernel/scst_tgt/handlers/vdisk_fileio/mgmt
275 echo "open disk2 /disk2 4096 NV_CACHE" >/sys/kernel/scst_tgt/handlers/vdisk_fileio/mgmt
276 echo "open blockio /dev/sda5" >/sys/kernel/scst_tgt/handlers/vdisk_blockio/mgmt
277 echo "open nullio none" >/sys/kernel/scst_tgt/handlers/vdisk_nullio/mgmt
278 echo "open cdrom" >/sys/kernel/scst_tgt/handlers/vcdrom/mgmt
279
280 service iscsi-scst start
281
282 echo "192.168.1.16 AccessControl" >/sys/kernel/scst_tgt/targets/iscsi/iSNSServer
283 echo "add_attribute IncomingUser joeD 12charsecret" >/sys/kernel/scst_tgt/targets/iscsi/mgmt
284 echo "add_attribute OutgoingUser jackD 12charsecret1" >/sys/kernel/scst_tgt/targets/iscsi/mgmt
285
286 echo "add_target iqn.2006-10.net.vlnb:tgt" >/sys/kernel/scst_tgt/targets/iscsi/mgmt
287
288 echo "add disk1 0" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt/luns/mgmt
289 echo "add cdrom 1" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt/luns/mgmt
290
291 echo "add_target iqn.2006-10.net.vlnb:tgt1 \
292         IncomingUser1 joe2 12charsecret2; \
293         IncomingUser joe 12charsecret; \
294         OutgoingUser jim1 12charpasswd; \
295         InitialR2T                      No; \
296         ImmediateData                   Yes; \
297         MaxRecvDataSegmentLength        8192; \
298         MaxXmitDataSegmentLength        8192; \
299         MaxBurstLength                  131072; \
300         FirstBurstLength                32768; \
301         MaxOutstandingR2T               1; \
302         HeaderDigest                    CRC32C,None; \
303         DataDigest                      CRC32C,None; \
304         QueuedCommands                  8; \
305         " >/sys/kernel/scst_tgt/targets/iscsi/mgmt
306
307 echo "add disk2 0" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/luns/mgmt
308 echo "add nullio 26" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/luns/mgmt
309
310 echo "create special_ini" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/ini_group/mgmt
311 echo "add blockio 0" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/ini_group/special_ini/luns/mgmt
312 echo "add iqn.2005-03.org.open-iscsi:cacdcd2520" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/ini_group/special_ini/initiators/mgmt
313
314 echo 1 >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt/enabled
315 echo 1 >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/enabled
316
317 echo 1 >/sys/kernel/scst_tgt/targets/iscsi/enabled
318
319 The resulting overall SCST sysfs hierarchy with an initiator connected to
320 both iSCSI-SCST targets will look like:
321
322 /sys/kernel/scst_tgt
323 |-- devices
324 |   |-- blockio
325 |   |   |-- block_size
326 |   |   |-- exported
327 |   |   |   `-- export0 -> ../../../targets/iscsi/iqn.2006-10.net.vlnb:tgt1/ini_group/special_ini/luns/0
328 |   |   |-- filename
329 |   |   |-- handler -> ../../handlers/vdisk_blockio
330 |   |   |-- read_only
331 |   |   |-- removable
332 |   |   |-- resync_size
333 |   |   |-- size
334 |   |   |-- t10_dev_id
335 |   |   `-- type
336 |   |-- cdrom
337 |   |   |-- exported
338 |   |   |   `-- export0 -> ../../../targets/iscsi/iqn.2006-10.net.vlnb:tgt/luns/1
339 |   |   |-- filename
340 |   |   |-- handler -> ../../handlers/vcdrom
341 |   |   |-- removable
342 |   |   |-- size
343 |   |   |-- t10_dev_id
344 |   |   `-- type
345 |   |-- disk1
346 |   |   |-- block_size
347 |   |   |-- exported
348 |   |   |   `-- export0 -> ../../../targets/iscsi/iqn.2006-10.net.vlnb:tgt/luns/0
349 |   |   |-- filename
350 |   |   |-- handler -> ../../handlers/vdisk_fileio
351 |   |   |-- nv_cache
352 |   |   |-- o_direct
353 |   |   |-- read_only
354 |   |   |-- removable
355 |   |   |-- resync_size
356 |   |   |-- size
357 |   |   |-- t10_dev_id
358 |   |   |-- type
359 |   |   `-- write_through
360 |   |-- disk2
361 |   |   |-- block_size
362 |   |   |-- exported
363 |   |   |   `-- export0 -> ../../../targets/iscsi/iqn.2006-10.net.vlnb:tgt1/luns/0
364 |   |   |-- filename
365 |   |   |-- handler -> ../../handlers/vdisk_fileio
366 |   |   |-- nv_cache
367 |   |   |-- o_direct
368 |   |   |-- read_only
369 |   |   |-- removable
370 |   |   |-- resync_size
371 |   |   |-- size
372 |   |   |-- t10_dev_id
373 |   |   |-- type
374 |   |   `-- write_through
375 |   `-- nullio
376 |       |-- block_size
377 |       |-- exported
378 |       |   `-- export0 -> ../../../targets/iscsi/iqn.2006-10.net.vlnb:tgt1/luns/26
379 |       |-- handler -> ../../handlers/vdisk_nullio
380 |       |-- read_only
381 |       |-- removable
382 |       |-- size
383 |       |-- t10_dev_id
384 |       `-- type
385 |-- handlers
386 |   |-- vcdrom
387 |   |   |-- mgmt
388 |   |   |-- trace_level
389 |   |   `-- type
390 |   |-- vdisk_blockio
391 |   |   |-- mgmt
392 |   |   |-- trace_level
393 |   |   `-- type
394 |   |-- vdisk_fileio
395 |   |   |-- mgmt
396 |   |   |-- trace_level
397 |   |   `-- type
398 |   `-- vdisk_nullio
399 |       |-- mgmt
400 |       |-- trace_level
401 |       `-- type
402 |-- sgv
403 |   |-- global_stats
404 |   |-- sgv
405 |   |   `-- stats
406 |   |-- sgv-clust
407 |   |   `-- stats
408 |   `-- sgv-dma
409 |       `-- stats
410 |-- targets
411 |   `-- iscsi
412 |       |-- IncomingUser
413 |       |-- OutgoingUser
414 |       |-- enabled
415 |       |-- iSNSServer
416 |       |-- iqn.2006-10.net.vlnb:tgt
417 |       |   |-- DataDigest
418 |       |   |-- FirstBurstLength
419 |       |   |-- HeaderDigest
420 |       |   |-- ImmediateData
421 |       |   |-- InitialR2T
422 |       |   |-- MaxBurstLength
423 |       |   |-- MaxOutstandingR2T
424 |       |   |-- MaxRecvDataSegmentLength
425 |       |   |-- MaxXmitDataSegmentLength
426 |       |   |-- QueuedCommands
427 |       |   |-- enabled
428 |       |   |-- ini_group
429 |       |   |   `-- mgmt
430 |       |   |-- luns
431 |       |   |   |-- 0
432 |       |   |   |   |-- device -> ../../../../../devices/disk1
433 |       |   |   |   `-- read_only
434 |       |   |   |-- 1
435 |       |   |   |   |-- device -> ../../../../../devices/cdrom
436 |       |   |   |   `-- read_only
437 |       |   |   `-- mgmt
438 |       |   |-- sessions
439 |       |   |   `-- iqn.2005-03.org.open-iscsi:cacdcd2520
440 |       |   |       |-- 10.170.75.2
441 |       |   |       |   |-- cid
442 |       |   |       |   |-- ip
443 |       |   |       |   `-- state
444 |       |   |       |-- DataDigest
445 |       |   |       |-- FirstBurstLength
446 |       |   |       |-- HeaderDigest
447 |       |   |       |-- ImmediateData
448 |       |   |       |-- InitialR2T
449 |       |   |       |-- MaxBurstLength
450 |       |   |       |-- MaxOutstandingR2T
451 |       |   |       |-- MaxRecvDataSegmentLength
452 |       |   |       |-- MaxXmitDataSegmentLength
453 |       |   |       |-- active_commands
454 |       |   |       |-- commands
455 |       |   |       |-- force_close
456 |       |   |       |-- initiator_name
457 |       |   |       |-- reinstating
458 |       |   |       `-- sid
459 |       |   `-- tid
460 |       |-- iqn.2006-10.net.vlnb:tgt1
461 |       |   |-- DataDigest
462 |       |   |-- FirstBurstLength
463 |       |   |-- HeaderDigest
464 |       |   |-- ImmediateData
465 |       |   |-- IncomingUser
466 |       |   |-- IncomingUser1
467 |       |   |-- InitialR2T
468 |       |   |-- MaxBurstLength
469 |       |   |-- MaxOutstandingR2T
470 |       |   |-- MaxRecvDataSegmentLength
471 |       |   |-- MaxXmitDataSegmentLength
472 |       |   |-- OutgoingUser
473 |       |   |-- QueuedCommands
474 |       |   |-- enabled
475 |       |   |-- ini_group
476 |       |   |   |-- mgmt
477 |       |   |   `-- special_ini
478 |       |   |       |-- initiators
479 |       |   |       |   |-- iqn.2005-03.org.open-iscsi:cacdcd2520
480 |       |   |       |   `-- mgmt
481 |       |   |       `-- luns
482 |       |   |           |-- 0
483 |       |   |           |   |-- device -> ../../../../../../../devices/blockio
484 |       |   |           |   `-- read_only
485 |       |   |           `-- mgmt
486 |       |   |-- luns
487 |       |   |   |-- 0
488 |       |   |   |   |-- device -> ../../../../../devices/disk2
489 |       |   |   |   `-- read_only
490 |       |   |   |-- 26
491 |       |   |   |   |-- device -> ../../../../../devices/nullio
492 |       |   |   |   `-- read_only
493 |       |   |   `-- mgmt
494 |       |   |-- sessions
495 |       |   |   `-- iqn.2005-03.org.open-iscsi:cacdcd2520
496 |       |   |       |-- 10.170.75.2
497 |       |   |       |   |-- cid
498 |       |   |       |   |-- ip
499 |       |   |       |   `-- state
500 |       |   |       |-- DataDigest
501 |       |   |       |-- FirstBurstLength
502 |       |   |       |-- HeaderDigest
503 |       |   |       |-- ImmediateData
504 |       |   |       |-- InitialR2T
505 |       |   |       |-- MaxBurstLength
506 |       |   |       |-- MaxOutstandingR2T
507 |       |   |       |-- MaxRecvDataSegmentLength
508 |       |   |       |-- MaxXmitDataSegmentLength
509 |       |   |       |-- active_commands
510 |       |   |       |-- commands
511 |       |   |       |-- force_close
512 |       |   |       |-- initiator_name
513 |       |   |       |-- reinstating
514 |       |   |       `-- sid
515 |       |   `-- tid
516 |       |-- mgmt
517 |       |-- open_state
518 |       |-- trace_level
519 |       `-- version
520 |-- threads
521 |-- trace_level
522 `-- version
523
524
525 Troubleshooting
526 ---------------
527
528 If you have any problems, start troubleshooting from looking at the
529 kernel and system logs. In the kernel log iSCSI-SCST and SCST core send
530 their messages, in the system log iscsi-scstd sends its messages. In
531 most Linux distributions both those logs are put to /var/log/messages
532 file.
533
534 Then, it might be helpful to increase level of logging. For kernel
535 modules you should make the debug build, by either running "make
536 release2debug" if you work with SCST SVN tree, or by enabling the
537 corresponding debug symbols (see below). 
538
539 If after looking on the logs the reason of your problem is still unclear
540 for you, report to SCST mailing list scst-devel@lists.sourceforge.net.
541
542
543 Work if target's backstorage or link is too slow
544 ------------------------------------------------
545
546 In some cases you can experience I/O stalls or see in the kernel log
547 abort or reset messages. It can happen under high I/O load, when your
548 target's backstorage gets overloaded, or working over a slow link, when
549 the link can't serve all the queued commands on time, 
550
551 To workaround it you can reduce QueuedCommands parameter for the
552 corresponding target to some lower value, like 8 (default is 32).
553
554 Also see SCST README file for more details about that issue and ways to
555 prevent it.
556
557
558 Performance advices
559 -------------------
560
561 1. If you use Windows XP or Windows 2003+ as initiators, you should
562 consider to decrease TcpAckFrequency parameter to 1. See
563 http://support.microsoft.com/kb/328890/ or google for "TcpAckFrequency"
564 for more details.
565
566 2. See how to get the maximum throughput from iSCSI, for instance, at
567 http://virtualgeek.typepad.com/virtual_geek/2009/01/a-multivendor-post-to-help-our-mutual-iscsi-customers-using-vmware.html.
568 It's about VMware, but its recommendations apply to other environments
569 as well.
570
571 3. ISCSI initiators built in pre-CentOS/RHEL 5 reported to have some
572 performance problems. If you use it, it is strongly advised to upgrade.
573
574
575 Compilation options
576 -------------------
577
578 There are the following compilation options, that could be commented
579 in/out in the kernel's module Makefile:
580
581  - CONFIG_SCST_DEBUG - turns on some debugging code, including some logging.
582    Makes the driver considerably bigger and slower, producing large amount of
583    log data.
584
585  - CONFIG_SCST_TRACING - turns on ability to log events. Makes the driver
586    considerably bigger and leads to some performance loss.
587
588  - CONFIG_SCST_EXTRACHECKS - adds extra validity checks in the various places.
589
590  - CONFIG_SCST_ISCSI_DEBUG_DIGEST_FAILURES - simulates digest failures in
591    random places.
592
593
594 Creating version of put_page_callback patch for your kernel
595 -----------------------------------------------------------
596
597 If you need your own version of put_page_callback patch for your custom
598 kernel, for which there is no prepared version, you can create it
599 yourself. This is pretty mechanical work, you don't need to understand
600 how it works, you only need to do the following two steps:
601
602 1. Apply the closest version of put_page_callback-<kernel-version>.patch
603 on your kernel. Resolve only failed hunks from include/ and
604 net/core/utils.c, ignore other failures.
605
606 2. Search net/ in your kernel source for "put_page" and "get_page"
607 functions. Replace them by "net_put_page" and "net_get_page"
608 correspondingly. 
609
610 That's all. Then please send your new
611 put_page_callback-<kernel-version>.patch to the SCST mailing list
612 scst-devel@lists.sourceforge.net.
613
614 Credits
615 -------
616
617 Thanks to:
618
619  * Ming Zhang <blackmagic02881@gmail.com> for fixes
620
621  * Krzysztof Blaszkowski <kb@sysmikro.com.pl> for many fixes
622
623  * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> for comments and help in
624    debugging
625
626  * Tomasz Chmielewski <mangoo@wpkg.org> for testing and suggestions
627
628  * Bart Van Assche <bart.vanassche@gmail.com> for a lot of help
629
630 Vladislav Bolkhovitin <vst@vlnb.net>, http://scst.sourceforge.net