Files
scst/scstadmin
Yan Burman 6a2d41b480 Merged revisions 5456-5485,5487-5508 via svnmerge from
svn+ssh://yanb123@svn.code.sf.net/p/scst/svn/trunk

........
  r5456 | bvassche | 2014-04-23 08:15:57 +0300 (Wed, 23 Apr 2014) | 1 line
  
  scst/README: Update implicit ALUA section
........
  r5457 | bvassche | 2014-04-23 11:57:17 +0300 (Wed, 23 Apr 2014) | 1 line
  
  ib_srpt: RHEL 5.9 build fix
........
  r5458 | bvassche | 2014-04-23 11:59:18 +0300 (Wed, 23 Apr 2014) | 1 line
  
  ib_srpt: Clean up the CM event handling code
........
  r5459 | bvassche | 2014-04-23 12:02:29 +0300 (Wed, 23 Apr 2014) | 1 line
  
  ib_srpt: Clean up the CM event handling code (part 2)
........
  r5460 | bvassche | 2014-04-23 12:04:15 +0300 (Wed, 23 Apr 2014) | 1 line
  
  ib_srpt, RDMA/CM: Avoid hanging sessions due to a cable pull
........
  r5461 | bvassche | 2014-04-23 12:20:52 +0300 (Wed, 23 Apr 2014) | 1 line
  
  ib_srpt: RHEL 5.9 build fix (part 2)
........
  r5462 | bvassche | 2014-04-23 16:38:54 +0300 (Wed, 23 Apr 2014) | 1 line
  
  ib_srpt: Clean up the CM event handling messages (part 3)
........
  r5463 | vlnb | 2014-04-24 03:07:22 +0300 (Thu, 24 Apr 2014) | 3 lines
  
  Cleanups
........
  r5464 | vlnb | 2014-04-24 05:30:52 +0300 (Thu, 24 Apr 2014) | 35 lines
  
  scst_lib: Avoid integer overflows
  
  This patch fixes the following kernel oops:
  
  [3696]: scst: scst_parse_cmd:826:Warning: expected transfer length 522240 for opcode 0x08 (handler vcdrom, target iscsi) doesn't match decoded value -2048
  [3696]: scst_parse_cmd:828:Suspicious CDB:
   (h)___0__1__2__3__4__5__6__7__8__9__A__B__C__D__E__F
     0: 08 1f ff ff ff 00   ......
  BUG: unable to handle kernel paging request at ffff88283597f0c8
  IP: [<ffffffff8135c3af>] sg_init_table+0x5f/0x90
  Call Trace:
   [<ffffffffa021eb48>] sgv_pool_alloc+0x3b8/0xbf0 [scst]
   [<ffffffffa0204c16>] scst_alloc_space+0xb6/0x290 [scst]
   [<ffffffffa01e2d28>] scst_prepare_space+0x3b8/0x6e0 [scst]
   [<ffffffffa01ef4a5>] scst_process_active_cmd+0x455/0x7e0 [scst]
   [<ffffffffa01efb22>] scst_cmd_init_done+0x2f2/0x5c0 [scst]
   [<ffffffffa0156ac2>] scst_cmd_init_stage1_done.constprop.37+0x12/0x20 [iscsi_scst]
   [<ffffffffa015d9fa>] scsi_cmnd_start+0x25a/0x550 [iscsi_scst]
   [<ffffffffa015e4b8>] cmnd_rx_start+0x148/0x1a0 [iscsi_scst]
   [<ffffffffa0161598>] process_read_io+0x3b8/0x800 [iscsi_scst]
   [<ffffffffa0161aa7>] scst_do_job_rd+0xc7/0x220 [iscsi_scst]
   [<ffffffffa016208d>] istrd+0x16d/0x2e0 [iscsi_scst]
   [<ffffffff81075bad>] kthread+0xed/0x110
   [<ffffffff816dd5bc>] ret_from_fork+0x7c/0xb0
  
  and causes the following message to be reported instead:
  
  [11269]: scst: scst_generic_parse:7402:***WARNING***: bufflen 16777215, data_len 16777215 or out_bufflen 0 too large for device disk12 (block size 2048)
  scst_generic_parse:CDB:
   (h)___0__1__2__3__4__5__6__7__8__9__A__B__C__D__E__F
     0: 08 1f ff ff ff 00   ......
  
  Signed-off-by: Bart Van Assche <bvanassche@acm.org>
........
  r5465 | vlnb | 2014-04-24 05:33:07 +0300 (Thu, 24 Apr 2014) | 5 lines
  
  scst_targ: Clarify a comment
  
  Signed-off-by: Bart Van Assche <bvanassche@acm.org>
........
  r5466 | vlnb | 2014-04-24 05:39:05 +0300 (Thu, 24 Apr 2014) | 12 lines
  
  scst: Avoid that smatch complains about dead code
  
  The panic() function that implements BUG() has been declared with attribute
  noreturn in some RHEL 5 kernel headers and also in the RHEL 6 kernel headers.
  Smatch warns about dead code if any code follows a function that has been
  declared with attribute noreturn. Hence add a few preprocessor statements to
  suppress the smatch warning when building against an upstream kernel or when
  building against RHEL 6 or later.
  
  Signed-off-by: Bart Van Assche <bvanassche@acm.org>
........
  r5467 | vlnb | 2014-04-24 06:15:12 +0300 (Thu, 24 Apr 2014) | 3 lines
  
  Fix queuing of UA for aborted by PREEMPT AND ABORT, if TAS is 0, + some clarifications
........
  r5468 | vlnb | 2014-04-24 07:03:51 +0300 (Thu, 24 Apr 2014) | 6 lines
  
  Fix for TARGET RESET race
  
  It can happen, when a device added after blocking, so unblocking then
  will make dev->block_count of the new device negative.
........
  r5469 | bvassche | 2014-04-24 11:41:15 +0300 (Thu, 24 Apr 2014) | 1 line
  
  scst/README: Update multipathd information in implicit ALUA section
........
  r5470 | bvassche | 2014-04-24 13:37:58 +0300 (Thu, 24 Apr 2014) | 1 line
  
  ib_srpt: OFED 3.12 build fix
........
  r5471 | bvassche | 2014-04-24 13:38:37 +0300 (Thu, 24 Apr 2014) | 1 line
  
  ib_srpt: Add support in the Makefile for MLNX OFED and for OFED 3.x
........
  r5472 | bvassche | 2014-04-24 14:11:26 +0300 (Thu, 24 Apr 2014) | 1 line
  
  ib_srpt: Make srpt_disconnect_ch() close sessions properly that have not yet reached the connected state
........
  r5473 | bvassche | 2014-04-24 15:27:00 +0300 (Thu, 24 Apr 2014) | 1 line
  
  ib_srpt, Makefile: Introduce the OFED_KERNEL_DIR variable
........
  r5474 | bvassche | 2014-04-24 21:43:41 +0300 (Thu, 24 Apr 2014) | 1 line
  
  ib_srpt: Unload properly with RDMA/CM disabled
........
  r5475 | bvassche | 2014-04-24 21:45:23 +0300 (Thu, 24 Apr 2014) | 1 line
  
  scstadmin, regression tests: Follow-up for r5409
........
  r5476 | bvassche | 2014-04-24 21:49:52 +0300 (Thu, 24 Apr 2014) | 16 lines
  
  scst: Avoid that reassigning a session triggers a kernel crash
  
  This patch fixes the following kernel bug:
  
  BUG: unable to handle kernel NULL pointer dereference at 0000000000000064
  IP: [<ffffffffa069e59c>] scst_alloc_add_tgt_dev+0x9c/0x540 [scst]
  Call Trace:
   [<ffffffffa06a1b57>] scst_check_reassign_sessions+0x367/0x3b0 [scst]
   [<ffffffffa06a1cb7>] scst_acg_add_acn+0x117/0x1a0 [scst]
   [<ffffffffa06a5e42>] scst_acg_ini_mgmt_store_work_fn+0x152/0x370 [scst]
   [<ffffffffa06a93a6>] sysfs_work_thread_fn+0xa6/0x2f0 [scst]
   [<ffffffff8108dd72>] kthread+0xd2/0xf0
   [<ffffffff816912bc>] ret_from_fork+0x7c/0xb0
  
  Reported-by: Zhen Xu <zhenxu.zj@gmail.com>
........
  r5477 | vlnb | 2014-04-25 02:07:58 +0300 (Fri, 25 Apr 2014) | 3 lines
  
  Minor logging cleanup
........
  r5478 | vlnb | 2014-04-25 02:44:25 +0300 (Fri, 25 Apr 2014) | 3 lines
  
  Cleanup
........
  r5479 | vlnb | 2014-04-25 05:03:04 +0300 (Fri, 25 Apr 2014) | 3 lines
  
  Saved mode pages added
........
  r5480 | vlnb | 2014-04-25 05:47:31 +0300 (Fri, 25 Apr 2014) | 3 lines
  
  Follow up for the previous commit
........
  r5481 | vlnb | 2014-04-26 04:56:36 +0300 (Sat, 26 Apr 2014) | 3 lines
  
  Processing of QErr and TMF_ONLY added
........
  r5482 | vlnb | 2014-04-26 05:12:17 +0300 (Sat, 26 Apr 2014) | 3 lines
  
  Cleanups
........
  r5483 | bvassche | 2014-04-26 09:32:32 +0300 (Sat, 26 Apr 2014) | 7 lines
  
  scst: Fix recently introduced checkpatch complaints about whitespace
  
  Fix two instances of the following checkpatch errors:
  
  ERROR: code indent should use tabs where possible
  ERROR: spaces required around that ':' (ctx:VxW)
........
  r5484 | bvassche | 2014-04-27 09:26:29 +0300 (Sun, 27 Apr 2014) | 6 lines
  
  scst_const.h: Fix a checkpatch complaint about whitespace
  
  Avoid that checkpatch reports the following warning message:
  
  WARNING: please, no space before tabs
........
  r5485 | bvassche | 2014-04-28 12:29:25 +0300 (Mon, 28 Apr 2014) | 5 lines
  
  scst: Export scst_path_put()
  
  This patch makes the code that was added via r5479 build against kernel
  version 2.6.38 and before.
........
  r5487 | vlnb | 2014-04-28 23:31:14 +0300 (Mon, 28 Apr 2014) | 3 lines
  
  Cleanups
........
  r5488 | vlnb | 2014-04-29 00:38:22 +0300 (Tue, 29 Apr 2014) | 3 lines
  
  Returned sense cleanups
........
  r5489 | vlnb | 2014-04-29 01:30:03 +0300 (Tue, 29 Apr 2014) | 3 lines
  
  Let REPORT SUPPORTED OPERATION CODES be handled by dev handler as well
........
  r5490 | vlnb | 2014-04-29 03:13:24 +0300 (Tue, 29 Apr 2014) | 6 lines
  
  It's wrong to clean reservation on failed RESERVE commands
  
  With multiple outstanding commands it can open a race window leading to
  loose of a valid reservation
........
  r5491 | vlnb | 2014-04-29 04:32:13 +0300 (Tue, 29 Apr 2014) | 3 lines
  
  SCSI logging improvements
........
  r5492 | vlnb | 2014-04-29 04:45:43 +0300 (Tue, 29 Apr 2014) | 3 lines
  
  Missed hunk in the previous commit
........
  r5493 | vlnb | 2014-04-29 05:09:29 +0300 (Tue, 29 Apr 2014) | 3 lines
  
  Minor logging improvement
........
  r5494 | bvassche | 2014-04-29 15:35:41 +0300 (Tue, 29 Apr 2014) | 1 line
  
  ib_srpt, README: Fix RDMA/CM login instructions
........
  r5495 | bvassche | 2014-04-29 15:39:50 +0300 (Tue, 29 Apr 2014) | 4 lines
  
  ib_srpt: Make LUN masking work again
  
  This patch fixes a regression that was introduced in r5425.
........
  r5496 | vlnb | 2014-04-30 04:04:27 +0300 (Wed, 30 Apr 2014) | 3 lines
  
  Extended INQUIRY page added
........
  r5497 | vlnb | 2014-04-30 04:07:41 +0300 (Wed, 30 Apr 2014) | 3 lines
  
  Cleanup
........
  r5498 | bvassche | 2014-04-30 08:30:45 +0300 (Wed, 30 Apr 2014) | 1 line
  
  ib_srpt: Fix two recently introduced checkpatch complaints about whitespace
........
  r5499 | bvassche | 2014-04-30 09:01:17 +0300 (Wed, 30 Apr 2014) | 1 line
  
  nightly build: Update kernel versions
........
  r5500 | vlnb | 2014-05-02 05:50:12 +0300 (Fri, 02 May 2014) | 3 lines
  
  Fix CDROM empty case
........
  r5501 | vlnb | 2014-05-02 05:50:34 +0300 (Fri, 02 May 2014) | 3 lines
  
  Cleanups
........
  r5502 | vlnb | 2014-05-02 05:56:19 +0300 (Fri, 02 May 2014) | 9 lines
  
  scst_sysfs: Save the value of the 'preferred' attribute only if it has been set
  
  The default value of the 'preferred' attribute is 0 (disabled). Hence
  it is only necessary that scstadmin saves the value of that attribute
  if it is not zero.
  
  Signed-off-by: Bart Van Assche <bvanassche@acm.org>
........
  r5503 | vlnb | 2014-05-07 02:22:32 +0300 (Wed, 07 May 2014) | 3 lines
  
  Cleanups and logging improvements
........
  r5504 | vlnb | 2014-05-07 05:13:11 +0300 (Wed, 07 May 2014) | 5 lines
  
  Fix COMMAND DATA LENGTH in All_commands parameter data of REPORT SUPPORTED OPERATION CODES
  
  Reported by Sebastian Herbszt <herbszt@gmx.de>
........
  r5505 | bvassche | 2014-05-07 11:38:47 +0300 (Wed, 07 May 2014) | 5 lines
  
  scst: Fix the procfs build
  
  Move the definition of scst_get_opcode_name() up such that it occurs
  outside #ifndef CONFIG_SCST_PROC / #endif. See also r5491.
........
  r5506 | bvassche | 2014-05-07 11:57:04 +0300 (Wed, 07 May 2014) | 4 lines
  
  scst_vdisk: Build fix for kernel versions < 2.6.37
      
  See also r5420 / r5479.
........
  r5507 | bvassche | 2014-05-07 16:42:56 +0300 (Wed, 07 May 2014) | 1 line
  
  nightly build: Update kernel versions
........
  r5508 | vlnb | 2014-05-08 05:28:49 +0300 (Thu, 08 May 2014) | 7 lines
  
  Avoid that the code for dumping the PR state triggers a race condition
  
  Callers of scst_pr_dump_prs() must hold dev_pr_mutex.
  
  Signed-off-by: Bart Van Assche <bvanassche@acm.org>
........


git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/iser@5509 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-05-08 08:32:01 +00:00
..
2010-08-31 17:28:49 +00:00

SCST Configuration/Administration scripts. Here you'll find scstadmin which reads
a configuration file /etc/scst.conf, or one if your choosing. With it you can manually
or automatically configure every aspect of SCST incuding enabling/disabling target mode
on your target SCSI controller. The old directory contains scst_db which uses a mysql
backend database to configure SCST but doesn't handle all the things scstadmin handles.
The perl module SCST::SCST is very generic and tries to handle error checking as well.

The init script was written for debian but should work on most distributions.


	scstadmin.sysfs
			Use this version if you've disabled procfs support in SCST.
	scstadmin.procfs
			This is the default version which uses the older procfs.

	scst-0.8.22	This is the SCST Perl module required by scstadmin and scst_db.
	scst-0.9.00	This is the SCST Perl module to be used with SCST compiled
                        for sysfs. Note, the current version of scstadmin will NOT yet
                        work with this module.

	scstadmin	Script which can accept operations on a command line or from
			a configuration file. See scst.conf. For command help,
				#> scstadmin

	scst.conf	Configuration file for scst script. Usually stored
			in /etc.

	examples	Configuration examples.

	init.d/scst	Init script to start SCST on boot which uses scstadmin.


INSTALLING
----------

Now do the normal:

make
make install

This installs scstadmin, the init.d script and the perl module. If you want SCST to
startup and configure automatically upon boot, enable SCST using your favorite
SysV init editor.

NOTE: The init.d startup & shutdown scripts now depend on lsb-core. Ensure you have
lsb-core installed or 'make install' will fail. Make sure /usr/lib/lsb/install_initd
exists.


GETTING HELP
------------

The new scstadmin has many more options than the olde procfs version to see
them, type:

scstadmin --help


CONVERTING FROM PROCFS (scst version 1.x)
-----------------------------------------

The new scstadmin uses a different configuration file format. However,
scstadmin will convert your old configuration file for you. No special
arguments are required, simply:

scstadmin -config <old config file>

Take note of warnings issued by scstadmin. Manually fix configuration
errors using scstadmin. Once you're satisfied your running configuration is
what you expect, save it by typing:

scstadmin -write_config <new config file>

Be sure to review this new configuration file to ensure it matches.


CREATING A CONFIGURATION FROM SCRATCH
-------------------------------------

* DEVICES *

Devices are defined by their handler. Commonly used handlers are dev_disk,
dev_cdrom, vdisk_fileio, vdisk_blockio and vcdrom.

To list all the available handlers, type:

scstadmin -list_handler

Physical devices used for passthrough handlers like dev_disk and dev_cdrom
are defined by their H:C:I:L :

HANDLER dev_disk {
	DEVICE 1:0:0:0
}

HANDLER dev_cdrom {
	DEVICE 2:0:0:0
}

Virtual devices are opened through special CREATE attributes. For example, a 
virtual disk named "disk1" pointing to a disk partition /dev/hda1 would be look
like:

HANDLER vdisk_fileio {
	DEVICE disk1 {
		filename /dev/hda1
	}
}

To list all the available CREATE attributes for a given handler, type:

scstadmin -list_hnd_attr <handler>

* ASSIGNING DEVICES TO TARGET AND INITIATORS *

Now we can assign the device to a target driver. To get a list of available
drivers, type:

scstadmin -list_driver

To list all available targets, type:

scstadmin -list_target

Now we can build our configuration assigning disk1 to LUN 0 for all initiators:

TARGET_DRIVER qla2x00t {
	TARGET 25:00:00:f0:98:87:92:f3 {
		LUN 0 disk1

		enabled 1
	}
}

NOTE: We added the attribute "enabled" and set it to "1". Without this attribute
set to 1, this target will be disabled and no initiators have access to its
LUNs.

This assigns disk1 to LUN 0 using default attributes. To list all available LUN
CREATE attributes, type:

scstadmin -list_tgt_attr <target> -driver <driver>

An example would be to use the CREATE attribute "read_only" to force the LUN to
be read-only:

TARGET_DRIVER qla2x00t {
	TARGET 25:00:00:f0:98:87:92:f3 {
		LUN 0 disk1 {
			read_only 1
		}

		# Assign LUN 1 to passthrough device 1:0:0:0
		LUN 1 1:0:0:0

		enabled 1
	}
}

Since LUNs 0 and 1 will now be available to all targets, we may want to
establish groups to restrict which LUNs are available to which initiators.
To do that, we use the GROUP clause within the TARGET clause:

TARGET_DRIVER qla2x00t {
	TARGET 25:00:00:f0:98:87:92:f3 {
		GROUP production {
			LUN 0 disk1 {
				read_only 1
			}

			INITIATOR 25:00:00:f0:99:87:94:a3
		}

		GROUP development {
			LUN 0 1:0:0:0
			INITIATOR 25:00:00:f0:99:87:94:a4
		}

		# Allow a CDROM device to be LUN 1 for all initiators
		LUN 1 2:0:0:0

		enabled 1
	}
}

For drivers which support virtual targets, like iSCSI, scstadmin will simply
create them on the fly:

TARGET_DRIVER iscsi {
	enabled 1

	IncomingUser "joe 12charsecret"

	TARGET iqn.2006-10.net.vlnb:tgt {
		IncomingUser "joe 12charsecret"

		LUN 0 disk1

		enabled 1
	}
}

Notice we included a new attribute "IncomingUser" This is a dynamic attribute
which allows an initiator to scan for LUNs, if added at the driver level, and
attach to LUNs if added at the target level. To retrieve a list of available
driver dynamic attributes, type:

scstadmin -list_drv_attr <driver>

To retrieve a list of available target dynamic attributes, type:

scstadmin -list_tgt_attr <target> -driver <driver>

Other attributes called non-key attributes may also be defined, assuming they
are writable. These can be listed using any of the above -list commands using
the extra -nonkey option:

scstadmin -list_tgt_attr <target> -driver <driver> -nonkey

* EXAMPLE CONFIGURATION *

A complete configuration using the above examples would look like:

HANDLER dev_disk {
	DEVICE 1:0:0:0
}

HANDLER dev_cdrom {
	DEVICE 2:0:0:0
}

HANDLER vdisk_fileio {
	DEVICE disk1 {
		filename /dev/hda1
	}
}

TARGET_DRIVER qla2x00t {
	TARGET 25:00:00:f0:98:87:92:f3 {
		GROUP production {
			LUN 0 disk1 {
				read_only 1
			}

			INITIATOR 25:00:00:f0:99:87:94:a3
		}

		GROUP development {
			LUN 0 1:0:0:0
			INITIATOR 25:00:00:f0:99:87:94:a4
		}

		# Allow a CDROM device to be LUN 1 for all initiators
		LUN 1 2:0:0:0

		enabled 1
	}
}

TARGET_DRIVER iscsi {
	enabled 1

	IncomingUser "joe 12charsecret"

	TARGET iqn.2006-10.net.vlnb:tgt {
		IncomingUser "joe 12charsecret"

		LUN 0 disk1

		enabled 1
	}
}