← Documents Documentation/target/tcm_mod_builder.rst GitHub 원문 ↗

Linux 6.18.37 · Target

TCM v4 fabric module script generator

tcm_mod_builder.py로 TCM v4 fabric module skeleton을 생성하고 Kbuild·Kconfig에 연결해 build한 뒤 ConfigFS LUN과 backstore를 구성하는 절차를 설명합니다.

Source pathDocumentation/target/tcm_mod_builder.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

tcm_mod_builder.rst:1-149

tcm_mod_builder.py로 TCM v4 fabric module skeleton을 생성하고 Kbuild·Kconfig에 연결해 build한 뒤 ConfigFS LUN과 backstore를 구성하는 절차를 설명합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 =========================================
2 The TCM v4 fabric module script generator
3 =========================================
4
5 Greetings all,
6
7 This document is intended to be a mini-HOWTO for using the tcm_mod_builder.py
8 script to generate a brand new functional TCM v4 fabric .ko module of your very own,
9 that once built can be immediately be loaded to start access the new TCM/ConfigFS
10 fabric skeleton, by simply using::
11
12 modprobe $TCM_NEW_MOD
13 mkdir -p /sys/kernel/config/target/$TCM_NEW_MOD
14
15 This script will create a new drivers/target/$TCM_NEW_MOD/, and will do the following
16
17 1) Generate new API callers for drivers/target/target_core_fabric_configs.c logic
18 ->make_tpg(), ->drop_tpg(), ->make_wwn(), ->drop_wwn(). These are created
19 into $TCM_NEW_MOD/$TCM_NEW_MOD_configfs.c
20 2) Generate basic infrastructure for loading/unloading LKMs and TCM/ConfigFS fabric module
21 using a skeleton struct target_core_fabric_ops API template.
22 3) Based on user defined T10 Proto_Ident for the new fabric module being built,
23 the TransportID / Initiator and Target WWPN related handlers for
24 SPC-3 persistent reservation are automatically generated in $TCM_NEW_MOD/$TCM_NEW_MOD_fabric.c
25 using drivers/target/target_core_fabric_lib.c logic.
26 4) NOP API calls for all other Data I/O path and fabric dependent attribute logic
27 in $TCM_NEW_MOD/$TCM_NEW_MOD_fabric.c
28
29 tcm_mod_builder.py depends upon the mandatory '-p $PROTO_IDENT' and '-m
30 $FABRIC_MOD_name' parameters, and actually running the script looks like::
31
32 target:/mnt/sdb/lio-core-2.6.git/Documentation/target# python tcm_mod_builder.py -p iSCSI -m tcm_nab5000
33 tcm_dir: /mnt/sdb/lio-core-2.6.git/Documentation/target/../../
34 Set fabric_mod_name: tcm_nab5000
35 Set fabric_mod_dir:
36 /mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000
37 Using proto_ident: iSCSI
38 Creating fabric_mod_dir:
39 /mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000
40 Writing file:
41 /mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_base.h
42 Using tcm_mod_scan_fabric_ops:
43 /mnt/sdb/lio-core-2.6.git/Documentation/target/../../include/target/target_core_fabric_ops.h
44 Writing file:
45 /mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_fabric.c
46 Writing file:
47 /mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_fabric.h
48 Writing file:
49 /mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_configfs.c
50 Writing file:
51 /mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/Kbuild
52 Writing file:
53 /mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/Kconfig
54 Would you like to add tcm_nab5000to drivers/target/Kbuild..? [yes,no]: yes
55 Would you like to add tcm_nab5000to drivers/target/Kconfig..? [yes,no]: yes
56
57 At the end of tcm_mod_builder.py. the script will ask to add the following
58 line to drivers/target/Kbuild::
59
60 obj-$(CONFIG_TCM_NAB5000) += tcm_nab5000/
61
62 and the same for drivers/target/Kconfig::
63
64 source "drivers/target/tcm_nab5000/Kconfig"
65
66 #) Run 'make menuconfig' and select the new CONFIG_TCM_NAB5000 item::
67
68 <M> TCM_NAB5000 fabric module
69
70 #) Build using 'make modules', once completed you will have::
71
72 target:/mnt/sdb/lio-core-2.6.git# ls -la drivers/target/tcm_nab5000/
73 total 1348
74 drwxr-xr-x 2 root root 4096 2010-10-05 03:23 .
75 drwxr-xr-x 9 root root 4096 2010-10-05 03:22 ..
76 -rw-r--r-- 1 root root 282 2010-10-05 03:22 Kbuild
77 -rw-r--r-- 1 root root 171 2010-10-05 03:22 Kconfig
78 -rw-r--r-- 1 root root 49 2010-10-05 03:23 modules.order
79 -rw-r--r-- 1 root root 738 2010-10-05 03:22 tcm_nab5000_base.h
80 -rw-r--r-- 1 root root 9096 2010-10-05 03:22 tcm_nab5000_configfs.c
81 -rw-r--r-- 1 root root 191200 2010-10-05 03:23 tcm_nab5000_configfs.o
82 -rw-r--r-- 1 root root 40504 2010-10-05 03:23 .tcm_nab5000_configfs.o.cmd
83 -rw-r--r-- 1 root root 5414 2010-10-05 03:22 tcm_nab5000_fabric.c
84 -rw-r--r-- 1 root root 2016 2010-10-05 03:22 tcm_nab5000_fabric.h
85 -rw-r--r-- 1 root root 190932 2010-10-05 03:23 tcm_nab5000_fabric.o
86 -rw-r--r-- 1 root root 40713 2010-10-05 03:23 .tcm_nab5000_fabric.o.cmd
87 -rw-r--r-- 1 root root 401861 2010-10-05 03:23 tcm_nab5000.ko
88 -rw-r--r-- 1 root root 265 2010-10-05 03:23 .tcm_nab5000.ko.cmd
89 -rw-r--r-- 1 root root 459 2010-10-05 03:23 tcm_nab5000.mod.c
90 -rw-r--r-- 1 root root 23896 2010-10-05 03:23 tcm_nab5000.mod.o
91 -rw-r--r-- 1 root root 22655 2010-10-05 03:23 .tcm_nab5000.mod.o.cmd
92 -rw-r--r-- 1 root root 379022 2010-10-05 03:23 tcm_nab5000.o
93 -rw-r--r-- 1 root root 211 2010-10-05 03:23 .tcm_nab5000.o.cmd
94
95 #) Load the new module, create a lun_0 configfs group, and add new TCM Core
96 IBLOCK backstore symlink to port::
97
98 target:/mnt/sdb/lio-core-2.6.git# insmod drivers/target/tcm_nab5000.ko
99 target:/mnt/sdb/lio-core-2.6.git# mkdir -p /sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0
100 target:/mnt/sdb/lio-core-2.6.git# cd /sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0/
101 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
102
103 target:/sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0# cd -
104 target:/mnt/sdb/lio-core-2.6.git# tree /sys/kernel/config/target/nab5000/
105 /sys/kernel/config/target/nab5000/
106 |-- discovery_auth
107 |-- iqn.foo
108 | `-- tpgt_1
109 | |-- acls
110 | |-- attrib
111 | |-- lun
112 | | `-- lun_0
113 | | |-- alua_tg_pt_gp
114 | | |-- alua_tg_pt_offline
115 | | |-- alua_tg_pt_status
116 | | |-- alua_tg_pt_write_md
117 | | `-- nab5000_port -> ../../../../../../target/core/iblock_0/lvm_test0
118 | |-- np
119 | `-- param
120 `-- version
121
122 target:/mnt/sdb/lio-core-2.6.git# lsmod
123 Module Size Used by
124 tcm_nab5000 3935 4
125 iscsi_target_mod 193211 0
126 target_core_stgt 8090 0
127 target_core_pscsi 11122 1
128 target_core_file 9172 2
129 target_core_iblock 9280 1
130 target_core_mod 228575 31
131 tcm_nab5000,iscsi_target_mod,target_core_stgt,target_core_pscsi,target_core_file,target_core_iblock
132 libfc 73681 0
133 scsi_debug 56265 0
134 scsi_tgt 8666 1 target_core_stgt
135 configfs 20644 2 target_core_mod
136
137 ----------------------------------------------------------------------
138
139 Future TODO items
140 =================
141
142 1) Add more T10 proto_idents
143 2) Make tcm_mod_dump_fabric_ops() smarter and generate function pointer
144 defs directly from include/target/target_core_fabric_ops.h:struct target_core_fabric_ops
145 structure members.
146
147 October 5th, 2010
148
149 Nicholas A. Bellinger <nab@linux-iscsi.org>
150

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

생성기의 목적과 산출 code

1-28

이 mini-HOWTO는 `tcm_mod_builder.py`로 새 TCM v4 fabric kernel module을 생성하는 방법을 설명한다. build한 `.ko`는 `modprobe $TCM_NEW_MOD`로 load하고 `/sys/kernel/config/target/$TCM_NEW_MOD`를 만들어 TCM/ConfigFS fabric skeleton에 즉시 접근할 수 있다.

script는 `drivers/target/$TCM_NEW_MOD/` directory를 새로 만든다. `target_core_fabric_configs.c` logic에 대응하는 `make_tpg()`, `drop_tpg()`, `make_wwn()`, `drop_wwn()` API caller를 `$TCM_NEW_MOD_configfs.c`에 생성한다.

LKM load/unload와 TCM/ConfigFS fabric module을 위한 기본 infrastructure를 `struct target_core_fabric_ops` skeleton template로 만든다.

사용자가 정한 T10 `Proto_Ident`를 바탕으로 SPC-3 persistent reservation에 필요한 TransportID, Initiator, Target WWPN handler를 `target_core_fabric_lib.c` logic을 이용해 `$TCM_NEW_MOD_fabric.c`에 자동 생성한다.

그 밖의 Data I/O path와 fabric-dependent attribute logic에는 NOP API call을 `$TCM_NEW_MOD_fabric.c`에 생성한다.

자동 생성 항목
산출물내용
*_configfs.cTPG·WWN 생성 및 제거 caller
fabric ops skeletonLKM과 ConfigFS 기본 lifecycle
*_fabric.cT10 identifier 기반 reservation handler와 NOP I/O callback

builder가 새 fabric module에 넣는 기본 골격이다.

=========================================
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

	1) Generate new API callers for drivers/target/target_core_fabric_configs.c logic
	   ->make_tpg(), ->drop_tpg(), ->make_wwn(), ->drop_wwn().  These are created
	   into $TCM_NEW_MOD/$TCM_NEW_MOD_configfs.c
	2) Generate basic infrastructure for loading/unloading LKMs and TCM/ConfigFS fabric module
	   using a skeleton struct target_core_fabric_ops API template.
	3) 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.
	4) NOP API calls for all other Data I/O path and fabric dependent attribute logic
	   in $TCM_NEW_MOD/$TCM_NEW_MOD_fabric.c

필수 option과 생성 file

29-56

`tcm_mod_builder.py`는 필수 option `-p $PROTO_IDENT`와 `-m $FABRIC_MOD_name`을 요구한다. 예제는 protocol `iSCSI`, module name `tcm_nab5000`으로 실행한다.

출력은 source tree root와 fabric module 이름·directory·protocol identifier를 확인한 뒤 `drivers/target/tcm_nab5000`을 만든다.

생성 file은 `tcm_nab5000_base.h`, `tcm_nab5000_fabric.c`, `tcm_nab5000_fabric.h`, `tcm_nab5000_configfs.c`, `Kbuild`, `Kconfig`다. fabric ops template는 `include/target/target_core_fabric_ops.h`에서 scan한다.

마지막에 새 module을 상위 `drivers/target/Kbuild`와 `drivers/target/Kconfig`에 추가할지 각각 묻고 예제에서는 둘 다 yes로 답한다.

Builder 실행
-p iSCSI-m tcm_nab5000Create drivers/target/tcm_nab5000
Scan target_core_fabric_ops.hWrite C headers and sources
Write Kbuild and KconfigOffer parent integration

두 필수 입력에서 build 가능한 source skeleton을 만든다.

생성 file
File역할
tcm_nab5000_base.h공통 정의
tcm_nab5000_fabric.c/.hfabric callback와 protocol handler
tcm_nab5000_configfs.cConfigFS object lifecycle
Kbuild / Kconfigbuild와 configuration 통합

예제 module directory의 source file이다.

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

Kbuild·Kconfig와 build

57-94

script 끝에서 상위 `drivers/target/Kbuild`에는 `obj-$(CONFIG_TCM_NAB5000) += tcm_nab5000/`를, `drivers/target/Kconfig`에는 `source "drivers/target/tcm_nab5000/Kconfig"`를 추가한다.

`make menuconfig`에서 `TCM_NAB5000 fabric module`을 module로 선택하고 `make modules`로 build한다.

예제 build directory에는 source와 header, Kbuild/Kconfig, object와 command metadata, `modules.order`, module metadata, 최종 `tcm_nab5000.ko`가 생성된다. 원문은 각 file의 당시 크기와 2010-10-05 timestamp를 그대로 보여 준다.

Build 통합
Parent Kbuild entryParent Kconfig source
make menuconfigCONFIG_TCM_NAB5000=m
make modulestcm_nab5000.ko

생성된 module을 kernel build system에 연결한다.

Build 산출물 종류
종류
입력 source*_base.h, *_fabric.c/.h, *_configfs.c
build 설정Kbuild, Kconfig
중간 산출물*.o, *.cmd, *.mod.c, modules.order
loadable moduletcm_nab5000.ko

directory listing의 file을 역할별로 묶는다.

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

Module load와 LUN 구성

95-121

새 module을 `insmod drivers/target/tcm_nab5000.ko`로 load한 뒤 ConfigFS에 `nab5000/iqn.foo/tpgt_1/lun/lun_0` group을 만든다.

`lun_0`에서 `/sys/kernel/config/target/core/iblock_0/lvm_test0` backstore를 `nab5000_port`라는 symbolic link로 연결한다.

원문의 `tree` 출력은 root에 `discovery_auth`, `iqn.foo`, `version`이 있고 `iqn.foo/tpgt_1` 아래에 `acls`, `attrib`, `lun`, `np`, `param`이 있음을 보여 준다. `lun/lun_0`에는 ALUA attribute file들과 backstore를 가리키는 `nab5000_port` link가 있다.

ConfigFS fabric tree
target/nab5000discovery_auth | version | iqn.foo
iqn.footpgt_1
tpgt_1acls | attrib | lun | np | param
lun/lun_0ALUA attributes | nab5000_port
nab5000_port symlinktarget/core/iblock_0/lvm_test0

ASCII tree의 object 관계를 같은 구조로 정리한다.

lun_0 항목
항목의미
alua_tg_pt_gpALUA target port group
alua_tg_pt_offline/status/write_mdALUA 상태와 metadata 속성
nab5000_portIBLOCK backstore symbolic link

예제 tree가 보여 주는 LUN 구성이다.

#) 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

Load된 module 관계

122-136

`lsmod` 예에서는 `tcm_nab5000`이 load되어 있고 사용 count는 4다. `target_core_mod`는 새 module과 `iscsi_target_mod`, `target_core_stgt`, `target_core_pscsi`, `target_core_file`, `target_core_iblock`에서 사용된다.

그 밖에 `libfc`, `scsi_debug`, `scsi_tgt`, `configfs`가 표시된다. `configfs`는 `target_core_mod`가 사용하며 target object hierarchy를 userspace에 노출한다.

주요 module 관계
Module관계
tcm_nab5000새 fabric module
target_core_modTCM core; 여러 backend와 fabric이 사용
target_core_iblock/file/pscsi/stgtbackstore 구현
configfsTCM object configuration filesystem

원문 lsmod 출력의 핵심 dependency다.

    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

향후 작업과 저자

137-149

향후 TODO는 더 많은 T10 `proto_ident`를 추가하는 것과 `tcm_mod_dump_fabric_ops()`를 개선하는 것이다.

두 번째 항목은 `include/target/target_core_fabric_ops.h`의 `struct target_core_fabric_ops` member를 직접 읽어 function pointer definition을 생성하도록 만드는 계획이다.

문서는 2010년 10월 5일 Nicholas A. Bellinger가 작성했다.

향후 생성기 개선
More T10 proto_identsBroader fabric protocol support
Read target_core_fabric_ops membersGenerate function pointer definitions

고정 template에서 header 기반 자동 생성으로 확장한다.

----------------------------------------------------------------------

Future TODO items
=================

	1) Add more T10 proto_idents
	2) 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 <nab@linux-iscsi.org>