forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[SCSI] target: Add LIO target core v4.0.0-rc6
LIO target is a full featured in-kernel target framework with the following feature set: High-performance, non-blocking, multithreaded architecture with SIMD support. Advanced SCSI feature set: * Persistent Reservations (PRs) * Asymmetric Logical Unit Assignment (ALUA) * Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S) * Full Error Recovery (ERL=0,1,2) * Active/active task migration and session continuation (ERL=2) * Thin LUN provisioning (UNMAP and WRITE_SAMExx) Multiprotocol target plugins Storage media independence: * Virtualization of all storage media; transparent mapping of IO to LUNs * No hard limits on number of LUNs per Target; maximum LUN size ~750 TB * Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc. Standards compliance: * Full compliance with IETF (RFC 3720) * Full implementation of SPC-4 PRs and ALUA Significant code cleanups done by Christoph Hellwig. [jejb: fix up for new block bdev exclusive interface. Minor fixes from Randy Dunlap and Dan Carpenter.] Signed-off-by: Nicholas A. Bellinger <[email protected]> Signed-off-by: James Bottomley <[email protected]>
- Loading branch information
Nicholas Bellinger
authored and
James Bottomley
committed
Jan 14, 2011
1 parent
f4013c3
commit c66ac9d
Showing
44 changed files
with
30,521 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
>>>>>>>>>> The TCM v4 fabric module script generator <<<<<<<<<< | ||
|
||
Greetings all, | ||
|
||
This document is intended to be a mini-HOWTO for using the tcm_mod_builder.py | ||
script to generate a brand new functional TCM v4 fabric .ko module of your very own, | ||
that once built can be immediately be loaded to start access the new TCM/ConfigFS | ||
fabric skeleton, by simply using: | ||
|
||
modprobe $TCM_NEW_MOD | ||
mkdir -p /sys/kernel/config/target/$TCM_NEW_MOD | ||
|
||
This script will create a new drivers/target/$TCM_NEW_MOD/, and will do the following | ||
|
||
*) Generate new API callers for drivers/target/target_core_fabric_configs.c logic | ||
->make_nodeacl(), ->drop_nodeacl(), ->make_tpg(), ->drop_tpg() | ||
->make_wwn(), ->drop_wwn(). These are created into $TCM_NEW_MOD/$TCM_NEW_MOD_configfs.c | ||
*) Generate basic infrastructure for loading/unloading LKMs and TCM/ConfigFS fabric module | ||
using a skeleton struct target_core_fabric_ops API template. | ||
*) Based on user defined T10 Proto_Ident for the new fabric module being built, | ||
the TransportID / Initiator and Target WWPN related handlers for | ||
SPC-3 persistent reservation are automatically generated in $TCM_NEW_MOD/$TCM_NEW_MOD_fabric.c | ||
using drivers/target/target_core_fabric_lib.c logic. | ||
*) NOP API calls for all other Data I/O path and fabric dependent attribute logic | ||
in $TCM_NEW_MOD/$TCM_NEW_MOD_fabric.c | ||
|
||
tcm_mod_builder.py depends upon the mandatory '-p $PROTO_IDENT' and '-m | ||
$FABRIC_MOD_name' parameters, and actually running the script looks like: | ||
|
||
target:/mnt/sdb/lio-core-2.6.git/Documentation/target# python tcm_mod_builder.py -p iSCSI -m tcm_nab5000 | ||
tcm_dir: /mnt/sdb/lio-core-2.6.git/Documentation/target/../../ | ||
Set fabric_mod_name: tcm_nab5000 | ||
Set fabric_mod_dir: | ||
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000 | ||
Using proto_ident: iSCSI | ||
Creating fabric_mod_dir: | ||
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000 | ||
Writing file: | ||
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_base.h | ||
Using tcm_mod_scan_fabric_ops: | ||
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../include/target/target_core_fabric_ops.h | ||
Writing file: | ||
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_fabric.c | ||
Writing file: | ||
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_fabric.h | ||
Writing file: | ||
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_configfs.c | ||
Writing file: | ||
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/Kbuild | ||
Writing file: | ||
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/Kconfig | ||
Would you like to add tcm_nab5000to drivers/target/Kbuild..? [yes,no]: yes | ||
Would you like to add tcm_nab5000to drivers/target/Kconfig..? [yes,no]: yes | ||
|
||
At the end of tcm_mod_builder.py. the script will ask to add the following | ||
line to drivers/target/Kbuild: | ||
|
||
obj-$(CONFIG_TCM_NAB5000) += tcm_nab5000/ | ||
|
||
and the same for drivers/target/Kconfig: | ||
|
||
source "drivers/target/tcm_nab5000/Kconfig" | ||
|
||
*) Run 'make menuconfig' and select the new CONFIG_TCM_NAB5000 item: | ||
|
||
<M> TCM_NAB5000 fabric module | ||
|
||
*) Build using 'make modules', once completed you will have: | ||
|
||
target:/mnt/sdb/lio-core-2.6.git# ls -la drivers/target/tcm_nab5000/ | ||
total 1348 | ||
drwxr-xr-x 2 root root 4096 2010-10-05 03:23 . | ||
drwxr-xr-x 9 root root 4096 2010-10-05 03:22 .. | ||
-rw-r--r-- 1 root root 282 2010-10-05 03:22 Kbuild | ||
-rw-r--r-- 1 root root 171 2010-10-05 03:22 Kconfig | ||
-rw-r--r-- 1 root root 49 2010-10-05 03:23 modules.order | ||
-rw-r--r-- 1 root root 738 2010-10-05 03:22 tcm_nab5000_base.h | ||
-rw-r--r-- 1 root root 9096 2010-10-05 03:22 tcm_nab5000_configfs.c | ||
-rw-r--r-- 1 root root 191200 2010-10-05 03:23 tcm_nab5000_configfs.o | ||
-rw-r--r-- 1 root root 40504 2010-10-05 03:23 .tcm_nab5000_configfs.o.cmd | ||
-rw-r--r-- 1 root root 5414 2010-10-05 03:22 tcm_nab5000_fabric.c | ||
-rw-r--r-- 1 root root 2016 2010-10-05 03:22 tcm_nab5000_fabric.h | ||
-rw-r--r-- 1 root root 190932 2010-10-05 03:23 tcm_nab5000_fabric.o | ||
-rw-r--r-- 1 root root 40713 2010-10-05 03:23 .tcm_nab5000_fabric.o.cmd | ||
-rw-r--r-- 1 root root 401861 2010-10-05 03:23 tcm_nab5000.ko | ||
-rw-r--r-- 1 root root 265 2010-10-05 03:23 .tcm_nab5000.ko.cmd | ||
-rw-r--r-- 1 root root 459 2010-10-05 03:23 tcm_nab5000.mod.c | ||
-rw-r--r-- 1 root root 23896 2010-10-05 03:23 tcm_nab5000.mod.o | ||
-rw-r--r-- 1 root root 22655 2010-10-05 03:23 .tcm_nab5000.mod.o.cmd | ||
-rw-r--r-- 1 root root 379022 2010-10-05 03:23 tcm_nab5000.o | ||
-rw-r--r-- 1 root root 211 2010-10-05 03:23 .tcm_nab5000.o.cmd | ||
|
||
*) Load the new module, create a lun_0 configfs group, and add new TCM Core | ||
IBLOCK backstore symlink to port: | ||
|
||
target:/mnt/sdb/lio-core-2.6.git# insmod drivers/target/tcm_nab5000.ko | ||
target:/mnt/sdb/lio-core-2.6.git# mkdir -p /sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0 | ||
target:/mnt/sdb/lio-core-2.6.git# cd /sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0/ | ||
target:/sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0# ln -s /sys/kernel/config/target/core/iblock_0/lvm_test0 nab5000_port | ||
|
||
target:/sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0# cd - | ||
target:/mnt/sdb/lio-core-2.6.git# tree /sys/kernel/config/target/nab5000/ | ||
/sys/kernel/config/target/nab5000/ | ||
|-- discovery_auth | ||
|-- iqn.foo | ||
| `-- tpgt_1 | ||
| |-- acls | ||
| |-- attrib | ||
| |-- lun | ||
| | `-- lun_0 | ||
| | |-- alua_tg_pt_gp | ||
| | |-- alua_tg_pt_offline | ||
| | |-- alua_tg_pt_status | ||
| | |-- alua_tg_pt_write_md | ||
| | `-- nab5000_port -> ../../../../../../target/core/iblock_0/lvm_test0 | ||
| |-- np | ||
| `-- param | ||
`-- version | ||
|
||
target:/mnt/sdb/lio-core-2.6.git# lsmod | ||
Module Size Used by | ||
tcm_nab5000 3935 4 | ||
iscsi_target_mod 193211 0 | ||
target_core_stgt 8090 0 | ||
target_core_pscsi 11122 1 | ||
target_core_file 9172 2 | ||
target_core_iblock 9280 1 | ||
target_core_mod 228575 31 | ||
tcm_nab5000,iscsi_target_mod,target_core_stgt,target_core_pscsi,target_core_file,target_core_iblock | ||
libfc 73681 0 | ||
scsi_debug 56265 0 | ||
scsi_tgt 8666 1 target_core_stgt | ||
configfs 20644 2 target_core_mod | ||
|
||
---------------------------------------------------------------------- | ||
|
||
Future TODO items: | ||
|
||
*) Add more T10 proto_idents | ||
*) Make tcm_mod_dump_fabric_ops() smarter and generate function pointer | ||
defs directly from include/target/target_core_fabric_ops.h:struct target_core_fabric_ops | ||
structure members. | ||
|
||
October 5th, 2010 | ||
Nicholas A. Bellinger <[email protected]> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
|
||
menuconfig TARGET_CORE | ||
tristate "Generic Target Core Mod (TCM) and ConfigFS Infrastructure" | ||
depends on SCSI && BLOCK | ||
select CONFIGFS_FS | ||
default n | ||
help | ||
Say Y or M here to enable the TCM Storage Engine and ConfigFS enabled | ||
control path for target_core_mod. This includes built-in TCM RAMDISK | ||
subsystem logic for virtual LUN 0 access | ||
|
||
if TARGET_CORE | ||
|
||
config TCM_IBLOCK | ||
tristate "TCM/IBLOCK Subsystem Plugin for Linux/BLOCK" | ||
help | ||
Say Y here to enable the TCM/IBLOCK subsystem plugin for non-buffered | ||
access to Linux/Block devices using BIO | ||
|
||
config TCM_FILEIO | ||
tristate "TCM/FILEIO Subsystem Plugin for Linux/VFS" | ||
help | ||
Say Y here to enable the TCM/FILEIO subsystem plugin for buffered | ||
access to Linux/VFS struct file or struct block_device | ||
|
||
config TCM_PSCSI | ||
tristate "TCM/pSCSI Subsystem Plugin for Linux/SCSI" | ||
help | ||
Say Y here to enable the TCM/pSCSI subsystem plugin for non-buffered | ||
passthrough access to Linux/SCSI device | ||
|
||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
EXTRA_CFLAGS += -I$(srctree)/drivers/target/ -I$(srctree)/drivers/scsi/ | ||
|
||
target_core_mod-y := target_core_configfs.o \ | ||
target_core_device.o \ | ||
target_core_fabric_configfs.o \ | ||
target_core_fabric_lib.o \ | ||
target_core_hba.o \ | ||
target_core_pr.o \ | ||
target_core_alua.o \ | ||
target_core_scdb.o \ | ||
target_core_tmr.o \ | ||
target_core_tpg.o \ | ||
target_core_transport.o \ | ||
target_core_cdb.o \ | ||
target_core_ua.o \ | ||
target_core_rd.o \ | ||
target_core_mib.o | ||
|
||
obj-$(CONFIG_TARGET_CORE) += target_core_mod.o | ||
|
||
# Subsystem modules | ||
obj-$(CONFIG_TCM_IBLOCK) += target_core_iblock.o | ||
obj-$(CONFIG_TCM_FILEIO) += target_core_file.o | ||
obj-$(CONFIG_TCM_PSCSI) += target_core_pscsi.o |
Oops, something went wrong.