Hello community, here is the log from the commit of package lio-utils for openSUSE:Factory checked in at 2014-05-02 13:59:46 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/lio-utils (Old) and /work/SRC/openSUSE:Factory/.lio-utils.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "lio-utils" Changes: -------- --- /work/SRC/openSUSE:Factory/lio-utils/lio-utils.changes 2014-04-02 17:24:46.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.lio-utils.new/lio-utils.changes 2014-05-02 13:59:47.000000000 +0200 @@ -1,0 +2,51 @@ +Thu Apr 17 10:19:21 CEST 2014 - hare@suse.de + +- Update to version 4.1: + * merge respositories + * Minor fixes + * Update copyrights +- Update to latest git version: + Add patches: + * 0101-Remove-tcm_snap.py-from-package-scripts.patch + * 0102-Add-additional-rc.target-run_fabric_cfs_ops-exclusio.patch + * 0104-lio-utils-Fix-tools-build-breakage-with-dpkg-buildpa.patch + * 0105-lio-utils-Remove-target-stop-start-from-debian-prerm.patch + * 0106-lio-utils-Convert-direct-unlink-call-to-os.unlink.patch + * 0107-lio_dump-Add-TPG-auth-attribute-check-for-lio_target.patch + * 0108-Handle-exception-in-cases-where-the-path-is-not-avai.patch + * 0109-tighter-checks.patch + * 0110-Handle-exception-during-non-existent-files.patch + * 0111-tcm_node-Remove-target_core_stgt-shutdown-warning.patch + * 0112-lio-utils-Add-init-script-for-SUSE.patch + * 0113-lio_node-Unload-iscsi_target_mod-correctly.patch + * 0114-tcm_node-Unload-tcm-modules-recursively.patch + * 0115-lio-utils-Use-the-proper-conditional-inversion-in-sh.patch + * 0116-lio-utils-Change-rc.target.suse-shutdown_lio_mod-to-.patch + * 0117-tcm_node-Fix-typo-in-tcm_create_pscsibyudev.patch + * 0118-tcm-file-Set-fd_buffered_io-1-based-upon-active-FILE.patch + * 0119-tcm_node-Fix-typo-in-tcm_create_pscsibyudev-again.patch + * 0120-lio-node-Add-iser-network-portal-attribute-ib_isert-.patch + * 0121-lio-dump-Add-iser-network-portal-attribute-support.patch + * 0122-Create-COPYING.patch + * 0123-Update-COPYING.patch + * 0124-Create-README.patch + * 0125-Update-README.patch + * 0126-Update-README.patch +- Rediff SUSE-specific patches +- Remove patches merged upstream: + * 0001-Remove-tcm_snap-reference.patch + * 0002-Fixup-paths-for-SLES-11-SP2.patch + * 0003-Add-init-script-for-SUSE.patch + * 0004-lio_node-Unload-iscsi_target_mod-correctly.patch + * 0005-tcm_node-Unload-tcm-modules-recursively.patch + * 0006-lio-utils-Use-the-proper-conditional-inversion-in-sh.patch + * 0009-lio_node-listendpoints-crashes-if-config-dir-is-not-.patch + * 0010-lio_dump-Add-TPG-auth-attribute-check-for-lio_target.patch + * 0011-tcm-file-Set-fd_buffered_io-1-based-upon-active-FILE.patch +- Include service file for systemd (bnc#869622) + * 0078-target.service-Add-systemd-service-file.patch +- Fixup compilation warnings; add patches: + * 0026-iscsiMib.c-fixes-for-strict-aliasing.patch + * 0027-Compile-tools-with-OPTFLAGS.patch + +------------------------------------------------------------------- Old: ---- 0001-Remove-tcm_snap-reference.patch 0002-Fixup-paths-for-SLES-11-SP2.patch 0003-Add-init-script-for-SUSE.patch 0004-lio_node-Unload-iscsi_target_mod-correctly.patch 0005-tcm_node-Unload-tcm-modules-recursively.patch 0006-lio-utils-Use-the-proper-conditional-inversion-in-sh.patch 0007-Configuration-file-parsing.patch 0010-lio_dump-Add-TPG-auth-attribute-check-for-lio_target.patch 0011-tcm-file-Set-fd_buffered_io-1-based-upon-active-FILE.patch 0012-tcm_node-Silence-output.patch lio-utils-4.0.tar.bz2 New: ---- 0025-target.service-Add-systemd-service-file.patch 0026-iscsiMib.c-fixes-for-strict-aliasing.patch 0027-Compile-tools-with-OPTFLAGS.patch 0101-Remove-tcm_snap.py-from-package-scripts.patch 0102-Add-additional-rc.target-run_fabric_cfs_ops-exclusio.patch 0104-lio-utils-Fix-tools-build-breakage-with-dpkg-buildpa.patch 0105-lio-utils-Remove-target-stop-start-from-debian-prerm.patch 0106-lio-utils-Convert-direct-unlink-call-to-os.unlink.patch 0107-lio_dump-Add-TPG-auth-attribute-check-for-lio_target.patch 0108-Handle-exception-in-cases-where-the-path-is-not-avai.patch 0109-tighter-checks.patch 0110-Handle-exception-during-non-existent-files.patch 0111-tcm_node-Remove-target_core_stgt-shutdown-warning.patch 0112-lio-utils-Add-init-script-for-SUSE.patch 0113-lio_node-Unload-iscsi_target_mod-correctly.patch 0114-tcm_node-Unload-tcm-modules-recursively.patch 0115-lio-utils-Use-the-proper-conditional-inversion-in-sh.patch 0116-lio-utils-Change-rc.target.suse-shutdown_lio_mod-to-.patch 0117-tcm_node-Fix-typo-in-tcm_create_pscsibyudev.patch 0118-tcm-file-Set-fd_buffered_io-1-based-upon-active-FILE.patch 0119-tcm_node-Fix-typo-in-tcm_create_pscsibyudev-again.patch 0120-lio-node-Add-iser-network-portal-attribute-ib_isert-.patch 0121-lio-dump-Add-iser-network-portal-attribute-support.patch 0122-Create-COPYING.patch 0123-Update-COPYING.patch 0124-Create-README.patch 0125-Update-README.patch 0126-Update-README.patch lio-utils-4.1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ lio-utils.spec ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:48.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:48.000000000 +0200 @@ -21,28 +21,47 @@ Group: System/Kernel Name: lio-utils -Version: 4.0 +Version: 4.1 Release: 0.<RELEASE7> Url: http://linux-iscsi.org/index.php/Lio-utils -Source: lio-utils-4.0.tar.bz2 +Source: lio-utils-4.1.tar.bz2 Source1: target.service BuildRequires: net-snmp-devel BuildRequires: python-devel +%{?systemd_requires} %if 0%{?suse_version} && 0%{?suse_version} <= 1110 %{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} %endif -Patch1: 0001-Remove-tcm_snap-reference.patch -Patch2: 0002-Fixup-paths-for-SLES-11-SP2.patch -Patch3: 0003-Add-init-script-for-SUSE.patch -Patch4: 0004-lio_node-Unload-iscsi_target_mod-correctly.patch -Patch5: 0005-tcm_node-Unload-tcm-modules-recursively.patch -Patch6: 0006-lio-utils-Use-the-proper-conditional-inversion-in-sh.patch -Patch7: 0007-Configuration-file-parsing.patch + +# Patches from upstream +Patch101: 0101-Remove-tcm_snap.py-from-package-scripts.patch +Patch102: 0102-Add-additional-rc.target-run_fabric_cfs_ops-exclusio.patch +Patch104: 0104-lio-utils-Fix-tools-build-breakage-with-dpkg-buildpa.patch +Patch105: 0105-lio-utils-Remove-target-stop-start-from-debian-prerm.patch +Patch106: 0106-lio-utils-Convert-direct-unlink-call-to-os.unlink.patch +Patch107: 0107-lio_dump-Add-TPG-auth-attribute-check-for-lio_target.patch +Patch108: 0108-Handle-exception-in-cases-where-the-path-is-not-avai.patch +Patch109: 0109-tighter-checks.patch +Patch110: 0110-Handle-exception-during-non-existent-files.patch +Patch111: 0111-tcm_node-Remove-target_core_stgt-shutdown-warning.patch +Patch112: 0112-lio-utils-Add-init-script-for-SUSE.patch +Patch113: 0113-lio_node-Unload-iscsi_target_mod-correctly.patch +Patch114: 0114-tcm_node-Unload-tcm-modules-recursively.patch +Patch115: 0115-lio-utils-Use-the-proper-conditional-inversion-in-sh.patch +Patch116: 0116-lio-utils-Change-rc.target.suse-shutdown_lio_mod-to-.patch +Patch117: 0117-tcm_node-Fix-typo-in-tcm_create_pscsibyudev.patch +Patch118: 0118-tcm-file-Set-fd_buffered_io-1-based-upon-active-FILE.patch +Patch119: 0119-tcm_node-Fix-typo-in-tcm_create_pscsibyudev-again.patch +Patch120: 0120-lio-node-Add-iser-network-portal-attribute-ib_isert-.patch +Patch121: 0121-lio-dump-Add-iser-network-portal-attribute-support.patch +Patch122: 0122-Create-COPYING.patch +Patch123: 0123-Update-COPYING.patch +Patch124: 0124-Create-README.patch +Patch125: 0125-Update-README.patch +Patch126: 0126-Update-README.patch +# SuSE-specific patches Patch8: 0008-Add-lio-utils-HOWTO.patch Patch9: 0009-lio_node-listendpoints-crashes-if-config-dir-is-not-.patch -Patch10: 0010-lio_dump-Add-TPG-auth-attribute-check-for-lio_target.patch -Patch11: 0011-tcm-file-Set-fd_buffered_io-1-based-upon-active-FILE.patch -Patch12: 0012-tcm_node-Silence-output.patch Patch13: 0013-lio_node-Silence-output.patch Patch14: 0014-Add-shell-header-when-dumping-configuration.patch Patch15: 0015-lio_node-Check-for-iscsi_target_mod.patch @@ -55,7 +74,9 @@ Patch22: 0022-rc.target.suse-Save-configuration-during-shutdown.patch Patch23: 0023-Use-OPTFLAGS-when-compiling.patch Patch24: 0024-lio_node-do-not-fail-if-target-port-is-already-disab.patch - +Patch25: 0025-target.service-Add-systemd-service-file.patch +Patch26: 0026-iscsiMib.c-fixes-for-strict-aliasing.patch +Patch27: 0027-Compile-tools-with-OPTFLAGS.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -108,18 +129,34 @@ %prep %setup -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 +%patch101 -p1 +%patch102 -p1 +%patch104 -p1 +%patch105 -p1 +%patch106 -p1 +%patch107 -p1 +%patch108 -p1 +%patch109 -p1 +%patch110 -p1 +%patch111 -p1 +%patch112 -p1 +%patch113 -p1 +%patch114 -p1 +%patch115 -p1 +%patch116 -p1 +%patch117 -p1 +%patch118 -p1 +%patch119 -p1 +%patch120 -p1 +%patch121 -p1 +%patch122 -p1 +%patch123 -p1 +%patch124 -p1 +%patch125 -p1 +%patch126 -p1 + %patch8 -p1 %patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 %patch13 -p1 %patch14 -p1 %patch15 -p1 @@ -132,24 +169,22 @@ %patch22 -p1 %patch23 -p1 %patch24 -p1 +%patch25 -p1 +%patch26 -p1 +%patch27 -p1 %build make %{?_smp_mflags} OPTFLAGS="$RPM_OPT_FLAGS" %install -%define _vardir /var/lib/target -if [ ! -d $RPM_BUILD_ROOT/etc/init.d ] ; then - mkdir -p $RPM_BUILD_ROOT/etc/init.d -fi -install -m 755 scripts/rc.target.suse $RPM_BUILD_ROOT/etc/init.d/target -if [ ! -d $RPM_BUILD_ROOT/etc/target ] ; then - mkdir -p $RPM_BUILD_ROOT/etc/target -fi +%define _vardir /var/target + install -vD %{S:1} ${RPM_BUILD_ROOT}/etc/sysconfig/SuSEfirewall2.d/services/target mkdir -p $RPM_BUILD_ROOT%{_vardir} mkdir $RPM_BUILD_ROOT%{_vardir}/pr mkdir $RPM_BUILD_ROOT%{_vardir}/alua +mkdir -p $RPM_BUILD_ROOT/etc/target for mod in target_core_mod target_core_file target_core_iblock target_core_pscsi ; do echo "modprobe $mod" >> $RPM_BUILD_ROOT/etc/target/tcm_start.sh done @@ -164,26 +199,41 @@ chmod 755 $RPM_BUILD_ROOT/%{python_sitelib}/$p.py ln -sf ../../%{python_sitelib}/$p.py $RPM_BUILD_ROOT/usr/sbin/$p done +%if %{?suse_version} > 1220 +install -D -m 0644 scripts/target.service $RPM_BUILD_ROOT%{_unitdir}/target.service +ln -sf service $RPM_BUILD_ROOT/usr/sbin/rctarget +%else +if [ ! -d $RPM_BUILD_ROOT/etc/init.d ] ; then + mkdir -p $RPM_BUILD_ROOT/etc/init.d +fi +install -m 755 scripts/rc.target.suse $RPM_BUILD_ROOT/etc/init.d/target ln -sf ../../etc/init.d/target $RPM_BUILD_ROOT/usr/sbin/rctarget -cat > $RPM_BUILD_ROOT/etc/target/tcm.cfg <<EOF -[tcm] -tcm_root: /sys/kernel/config/target -tcm_var: %{_vardir} -EOF +%endif %preun +%if %{?suse_version} > 1220 +%service_del_preun target.service +%else %stop_on_removal target +%endif %postun +%if %{?suse_version} > 1220 +%service_del_postun target.service +%else %insserv_cleanup target +%endif %files %defattr(-,root,root,-) +%if %{?suse_version} > 1220 +%{_unitdir}/target.service +%else /etc/init.d/target +%endif %dir /etc/target %config /etc/target/lio_start.sh %config /etc/target/tcm_start.sh -%config /etc/target/tcm.cfg %config %attr(0644,root,root) /etc/sysconfig/SuSEfirewall2.d/services/target %dir %{_vardir} %dir %{_vardir}/pr ++++++ 0008-Add-lio-utils-HOWTO.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:48.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:48.000000000 +0200 @@ -1,14 +1,14 @@ -From 304f1aeb5815bcfb5b5ce8a4c2f7e0da8db3d529 Mon Sep 17 00:00:00 2001 +From a4002b00852370ce535050f8fd8c6f9ea3cdd9c8 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Thu, 4 Oct 2012 15:11:59 +0200 -Subject: [PATCH] Add lio-utils HOWTO +Subject: Add lio-utils HOWTO Some documentation is always helpful, even though it might be slightly outdated. Signed-off-by: Hannes Reinecke <hare@suse.de> --- - lio-utils.HOWTO | 338 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + lio-utils.HOWTO | 338 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 338 insertions(+) create mode 100644 lio-utils.HOWTO @@ -357,5 +357,5 @@ +target:~# lio_node --enabletpg iqn.2003-01.org.linux-iscsi.target.i686:sn.5837873e417c 1 +Successfully enabled iSCSI Target Portal Group: iqn.2003-01.org.linux-iscsi.target.i686:sn.5837873e417c 1 -- -1.7.10.4 +1.8.1.4 ++++++ 0009-lio_node-listendpoints-crashes-if-config-dir-is-not-.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:48.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:48.000000000 +0200 @@ -1,4 +1,4 @@ -From 8125617117d022b716ff86b2d4339a0f0ce28907 Mon Sep 17 00:00:00 2001 +From 12da40834576d1f5dbf17710948d8cb10a810a2d Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Fri, 26 Oct 2012 12:46:41 +0200 Subject: lio_node: --listendpoints crashes if config dir is not present @@ -10,14 +10,14 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> --- - lio-py/lio_node.py | 17 ++++++++++++++++- + lio-py/lio_node.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lio-py/lio_node.py b/lio-py/lio_node.py -index 2f8a448..343f62a 100755 +index 02e661b..78c7592 100755 --- a/lio-py/lio_node.py +++ b/lio-py/lio_node.py -@@ -146,7 +146,9 @@ def __lio_target_del_iqn(option, opt_str, value, parser, delete_tpg_md): +@@ -132,7 +132,9 @@ def __lio_target_del_iqn(option, opt_str, value, parser, delete_tpg_md): iqn = iqn.lower(); # Loop through LIO-Target IQN+TPGT list @@ -28,7 +28,7 @@ for tpgt_tmp in tpg_root: if tpgt_tmp == "fabric_statistics": continue -@@ -888,6 +890,8 @@ def lio_target_alua_show_tgptgp(option, opt_str, value, parser): +@@ -887,6 +889,8 @@ def lio_target_alua_show_tgptgp(option, opt_str, value, parser): return def lio_target_list_endpoints(option, opt_str, value, parser): @@ -37,7 +37,7 @@ iqn_root = os.listdir(lio_root) -@@ -956,6 +960,9 @@ def lio_target_list_lunacls(option, opt_str, value, parser): +@@ -955,6 +959,9 @@ def lio_target_list_lunacls(option, opt_str, value, parser): iqn = iqn.lower(); tpgt = str(value[1]); @@ -47,7 +47,7 @@ iqn_root = os.listdir(lio_root) nacl_root_dir = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/acls" -@@ -1001,6 +1008,9 @@ def lio_target_list_nodeacls(option, opt_str, value, parser): +@@ -1000,6 +1007,9 @@ def lio_target_list_nodeacls(option, opt_str, value, parser): iqn = iqn.lower(); tpgt = str(value[1]); @@ -57,7 +57,7 @@ iqn_root = os.listdir(lio_root) nacl_root_dir = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/acls" -@@ -1028,6 +1038,9 @@ def lio_target_list_nps(option, opt_str, value, parser): +@@ -1027,6 +1037,9 @@ def lio_target_list_nps(option, opt_str, value, parser): iqn = iqn.lower(); tpgt = str(value[1]); @@ -67,7 +67,7 @@ np_root = os.listdir(lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np") for np in np_root: print np -@@ -1035,6 +1048,8 @@ def lio_target_list_nps(option, opt_str, value, parser): +@@ -1034,6 +1047,8 @@ def lio_target_list_nps(option, opt_str, value, parser): return def lio_target_list_targetnames(option, opt_str, value, parser): @@ -77,5 +77,5 @@ iqn_root = os.listdir(lio_root) -- -1.7.10.4 +1.8.1.4 ++++++ 0013-lio_node-Silence-output.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:48.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:48.000000000 +0200 @@ -1,25 +1,24 @@ -From e599674d4d4bac187d164ed192362325edb6a043 Mon Sep 17 00:00:00 2001 +From 352f47122913bf6749106766de6ca5c186a79048 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> -Date: Fri, 1 Feb 2013 13:06:00 +0100 +Date: Thu, 17 Apr 2014 09:08:08 +0200 Subject: lio_node: Silence output Add option '--debug' to silence lio_node for the standard case. Signed-off-by: Hannes Reinecke <hare@suse.de> --- - lio-py/lio_node.py | 89 ++++++++++++++++++++++++++++++---------------------- - 1 file changed, 51 insertions(+), 38 deletions(-) + lio-py/lio_node.py | 81 ++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 48 insertions(+), 33 deletions(-) diff --git a/lio-py/lio_node.py b/lio-py/lio_node.py -index 343f62a..55a9208 100755 +index 78c7592..d58213f 100755 --- a/lio-py/lio_node.py +++ b/lio-py/lio_node.py -@@ -21,12 +21,19 @@ try: - except ConfigParser.NoSectionError: - tcm_var = "/var/target" - +@@ -8,11 +8,18 @@ from optparse import OptionParser + tcm_root = "/sys/kernel/config/target/core" + lio_root = "/sys/kernel/config/target/iscsi" + alua_secondary_md_dir = "/var/target/alua/iSCSI/" +lio_debug = 0 - alua_secondary_md_dir = tcm_var + "/alua/iSCSI/" def lio_err(msg): print msg @@ -34,16 +33,16 @@ def lio_alua_check_secondary_md(iqn, tpgt): alua_sec_md_path = alua_secondary_md_dir + iqn + "+" + tpgt + "/" if os.path.isdir(alua_sec_md_path) == False: -@@ -99,7 +106,7 @@ def lio_alua_process_secondary_md(option, opt_str, value, parser): +@@ -85,7 +92,7 @@ def lio_alua_process_secondary_md(option, opt_str, value, parser): p = open(alua_sec_md_file, 'rU') if not p: - print "Unable to process ALUA secondary metadata for: " + alua_sec_md_file -+ lio_err("Unable to process ALUA secondary metadata for: " + alua_sec_md_file) ++ lio_dbg("Unable to process ALUA secondary metadata for: " + alua_sec_md_file) line = p.readline() while line: -@@ -166,7 +173,7 @@ def __lio_target_del_iqn(option, opt_str, value, parser, delete_tpg_md): +@@ -152,7 +159,7 @@ def __lio_target_del_iqn(option, opt_str, value, parser, delete_tpg_md): # print "rmdir_op: " + rmdir_op ret = os.system(rmdir_op) if not ret: @@ -52,16 +51,7 @@ else: lio_err("Unable to release iSCSI Target Endpoint IQN: " + iqn) -@@ -198,7 +205,7 @@ def __lio_target_del_tpg(option, opt_str, value, parser, delete_tpg_md): - disable_op = "echo 0 > " + lio_root + "/" + iqn + "/tpgt_" + tpgt + "/enable" - ret = os.system(disable_op) - if ret: -- print "Unable to disable TPG: " + iqn + " TPGT: " + tpgt -+ lio_err("Unable to disable TPG: " + iqn + " TPGT: " + tpgt) - - np_root = os.listdir(lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np") - for np in np_root: -@@ -228,7 +235,7 @@ def __lio_target_del_tpg(option, opt_str, value, parser, delete_tpg_md): +@@ -214,7 +221,7 @@ def __lio_target_del_tpg(option, opt_str, value, parser, delete_tpg_md): # print "rmdir_op: " + rmdir_op ret = os.system(rmdir_op) if not ret: @@ -70,16 +60,16 @@ else: lio_err("Unable to release iSCSI Target Portal Group: " + iqn + " TPGT: " + tpgt) -@@ -280,7 +287,7 @@ def lio_target_add_np(option, opt_str, value, parser): +@@ -266,7 +273,7 @@ def lio_target_add_np(option, opt_str, value, parser): # print "mkdir_op: " + mkdir_op ret = os.system(mkdir_op) if not ret: - print "Successfully created network portal: " + np + " created " + iqn + " TPGT: " + tpgt -+ lio_dbg("Successfully created network portal: " + np + " created " + iqn + " TPGT: " + tpgt) ++ lio_dbg("Successfully created network portal: " + np + " created " + iqn + " TPGT: " + tpgt ) lio_alua_check_secondary_md(iqn, tpgt) else: lio_err("Unable to create network portal: " + np + " created " + iqn + " TPGT: " + tpgt) -@@ -297,7 +304,7 @@ def lio_target_del_np(option, opt_str, value, parser): +@@ -296,7 +303,7 @@ def lio_target_del_np(option, opt_str, value, parser): # print "rmdir_op: " + rmdir_op ret = os.system(rmdir_op) if not ret: @@ -88,7 +78,7 @@ else: lio_err("Unable to release network portal: " + np + " created " + iqn + " TPGT: " + tpgt) -@@ -327,7 +334,7 @@ def lio_target_add_port(option, opt_str, value, parser): +@@ -326,7 +333,7 @@ def lio_target_add_port(option, opt_str, value, parser): # print "link_op: " + link_op ret = os.system(link_op) if not ret: @@ -97,7 +87,7 @@ lio_alua_check_secondary_md(iqn, tpgt) lio_alua_set_secondary_write_md(iqn, tpgt, lun) else: -@@ -350,7 +357,7 @@ def lio_target_add_tpg(option, opt_str, value, parser): +@@ -349,7 +356,7 @@ def lio_target_add_tpg(option, opt_str, value, parser): if ret: lio_err("Unable to create iSCSI Target Portal Group ConfigFS directory") else: @@ -106,7 +96,7 @@ lio_alua_check_secondary_md(iqn, tpgt) return -@@ -387,7 +394,7 @@ def __lio_target_del_port(option, opt_str, value, parser): +@@ -386,7 +393,7 @@ def __lio_target_del_port(option, opt_str, value, parser): # print "del_port rmdir_op: " + rmdir_op ret = os.system(rmdir_op); if not ret: @@ -115,7 +105,7 @@ else: lio_err("Unable to rmdir iSCSI Target Logical Unit configfs directory") -@@ -420,7 +427,7 @@ def lio_target_tpg_disableauth(option, opt_str, value, parser): +@@ -419,7 +426,7 @@ def lio_target_tpg_disableauth(option, opt_str, value, parser): if ret: lio_err("Unable to disable iSCSI Authentication on iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -124,7 +114,7 @@ return -@@ -434,7 +441,7 @@ def lio_target_tpg_demomode(option, opt_str, value, parser): +@@ -433,7 +440,7 @@ def lio_target_tpg_demomode(option, opt_str, value, parser): if ret: lio_err("Unable to disable Initiator ACL mode (Enable DemoMode) on iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -133,7 +123,7 @@ return -@@ -451,7 +458,7 @@ def lio_target_disable_lunwp(option, opt_str, value, parser): +@@ -450,7 +457,7 @@ def lio_target_disable_lunwp(option, opt_str, value, parser): if ret: lio_err("Unable to disable WriteProtect for Mapped LUN: " + mapped_lun + " for " + initiator_iqn + " on iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -142,7 +132,7 @@ return -@@ -465,7 +472,7 @@ def lio_target_enable_auth(option, opt_str, value, parser): +@@ -464,7 +471,7 @@ def lio_target_enable_auth(option, opt_str, value, parser): if ret: lio_err("Unable to enable iSCSI Authentication on iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -151,7 +141,7 @@ return def lio_target_enable_lunwp(option, opt_str, value, parser): -@@ -481,7 +488,7 @@ def lio_target_enable_lunwp(option, opt_str, value, parser): +@@ -480,7 +487,7 @@ def lio_target_enable_lunwp(option, opt_str, value, parser): if ret: lio_err("Unable to enable WriteProtect for Mapped LUN: " + mapped_lun + " for " + initiator_iqn + " on iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -160,7 +150,7 @@ return -@@ -495,7 +502,7 @@ def lio_target_enable_tpg(option, opt_str, value, parser): +@@ -494,7 +501,7 @@ def lio_target_enable_tpg(option, opt_str, value, parser): if ret: lio_err("Unable to enable iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -169,7 +159,7 @@ return -@@ -509,7 +516,7 @@ def lio_target_disable_tpg(option, opt_str, value, parser): +@@ -508,7 +515,7 @@ def lio_target_disable_tpg(option, opt_str, value, parser): if ret: lio_err("Unable to disable iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -178,7 +168,7 @@ return -@@ -523,7 +530,7 @@ def lio_target_enableaclmode(option, opt_str, value, parser): +@@ -522,7 +529,7 @@ def lio_target_enableaclmode(option, opt_str, value, parser): if ret: lio_err("Unable to enable Initiator ACL mode (Disabled DemoMode) on iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -187,7 +177,7 @@ return -@@ -547,7 +554,7 @@ def lio_target_add_lunacl(option, opt_str, value, parser): +@@ -546,7 +553,7 @@ def lio_target_add_lunacl(option, opt_str, value, parser): if ret: lio_err("Unable to add iSCSI Initiator Mapped LUN: " + mapped_lun + " ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -196,15 +186,7 @@ lio_alua_check_secondary_md(iqn, tpgt) return -@@ -569,7 +576,6 @@ def lio_target_del_lunacl(option, opt_str, value, parser): - continue; - - unlink_op = "unlink " + lio_root + "/" + iqn + "/tpgt_" + tpgt + "/acls/" + initiator_iqn + "/lun_" + mapped_lun + "/" + lun_acl_link --# print "unlink_op: " + unlink_op - ret = os.system(unlink_op) - if ret: - lio_err("Unable to unlink iSCSI Initiator Mapped LUN: " + mapped_lun + " ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt) -@@ -579,7 +585,7 @@ def lio_target_del_lunacl(option, opt_str, value, parser): +@@ -578,7 +585,7 @@ def lio_target_del_lunacl(option, opt_str, value, parser): if ret: lio_err("Unable to delete iSCSI Initiator Mapped LUN: " + mapped_lun + " ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -213,7 +195,7 @@ return -@@ -595,7 +601,7 @@ def lio_target_add_nodeacl(option, opt_str, value, parser): +@@ -594,7 +601,7 @@ def lio_target_add_nodeacl(option, opt_str, value, parser): if ret: lio_err("Unable to add iSCSI Initaitor ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -222,7 +204,7 @@ lio_alua_check_secondary_md(iqn, tpgt) return -@@ -621,7 +627,7 @@ def lio_target_del_nodeacl(option, opt_str, value, parser): +@@ -620,7 +627,7 @@ def lio_target_del_nodeacl(option, opt_str, value, parser): if ret: lio_err("Unable to delete iSCSI Initaitor ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -231,7 +213,7 @@ return -@@ -649,7 +655,7 @@ def lio_target_set_chap_auth(option, opt_str, value, parser): +@@ -648,7 +655,7 @@ def lio_target_set_chap_auth(option, opt_str, value, parser): if ret: lio_err("Unable to set CHAP password for iSCSI Initaitor ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -240,16 +222,16 @@ return -@@ -677,7 +683,7 @@ def lio_target_set_chap_mutual_auth(option, opt_str, value, parser): +@@ -676,7 +683,7 @@ def lio_target_set_chap_mutual_auth(option, opt_str, value, parser): if ret: lio_err("Unable to set mutual CHAP password for iSCSI Initaitor ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt) else: - print "Successfully set mutual CHAP authentication for iSCSI Initaitor ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt -+ lio_dbg("Successfully set mutual CHAP authentication for iSCSI Initaitor ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt ) ++ lio_dbg("Successfully set mutual CHAP authentication for iSCSI Initaitor ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt) return -@@ -699,7 +705,7 @@ def lio_target_set_chap_discovery_auth(option, opt_str, value, parser): +@@ -698,7 +705,7 @@ def lio_target_set_chap_discovery_auth(option, opt_str, value, parser): if ret: lio_err("Unable to set CHAP password for iSCSI Discovery Authentication") else: @@ -258,7 +240,7 @@ return -@@ -721,7 +727,7 @@ def lio_target_set_chap_mutual_discovery_auth(option, opt_str, value, parser): +@@ -720,7 +727,7 @@ def lio_target_set_chap_mutual_discovery_auth(option, opt_str, value, parser): if ret: lio_err("Unable to set mutual CHAP password for iSCSI Discovery Authentication") else: @@ -267,7 +249,7 @@ return -@@ -738,9 +744,9 @@ def lio_target_set_enforce_discovery_auth(option, opt_str, value, parser): +@@ -737,9 +744,9 @@ def lio_target_set_enforce_discovery_auth(option, opt_str, value, parser): lio_err("Unable to set da_attr: " + da_attr) if value == "1": @@ -279,7 +261,7 @@ return -@@ -758,7 +764,7 @@ def lio_target_set_node_tcq(option, opt_str, value, parser): +@@ -757,7 +764,7 @@ def lio_target_set_node_tcq(option, opt_str, value, parser): if ret: lio_err("Unable to set TCQ: " + depth + " for iSCSI Initaitor ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt) else: @@ -288,7 +270,7 @@ return -@@ -778,7 +784,7 @@ def lio_target_alua_set_tgptgp(option, opt_str, value, parser): +@@ -777,7 +784,7 @@ def lio_target_alua_set_tgptgp(option, opt_str, value, parser): if ret: lio_err("Unable to set ALUA Target Port Group: " + tg_pt_gp_name + " for LUN: " + lun + " on " + iqn + " " + tpgt) else: @@ -297,7 +279,7 @@ return -@@ -797,7 +803,7 @@ def lio_target_alua_set_tgpt_offline(option, opt_str, value, parser): +@@ -796,7 +803,7 @@ def lio_target_alua_set_tgpt_offline(option, opt_str, value, parser): if ret: lio_err("Unable to set ALUA secondary state OFFLINE bit for LUN: " + lun + " on " + iqn + " " + tpgt) else: @@ -306,7 +288,7 @@ return -@@ -816,7 +822,7 @@ def lio_target_alua_clear_tgpt_offline(option, opt_str, value, parser): +@@ -815,7 +822,7 @@ def lio_target_alua_clear_tgpt_offline(option, opt_str, value, parser): if ret: lio_err("Unable to clear ALUA secondary state OFFLINE for LUN: " + lun + " on " + iqn + " " + tpgt) else: @@ -315,7 +297,7 @@ return def lio_target_show_chap_auth(option, opt_str, value, parser): -@@ -1107,7 +1113,7 @@ def lio_target_set_node_attr(option, opt_str, value, parser): +@@ -1106,7 +1113,7 @@ def lio_target_set_node_attr(option, opt_str, value, parser): lio_err("Unable to set node attr: " + attr_dir + "/" + attr) p.close() @@ -324,7 +306,7 @@ return -@@ -1175,7 +1181,7 @@ def lio_target_set_tpg_attr(option, opt_str, value, parser): +@@ -1174,7 +1181,7 @@ def lio_target_set_tpg_attr(option, opt_str, value, parser): lio_err("Unable to set tpg attr: " + attr_dir + "/" + attr) p.close() @@ -333,7 +315,7 @@ return -@@ -1221,7 +1227,7 @@ def lio_target_set_tpg_param(option, opt_str, value, parser): +@@ -1220,7 +1227,7 @@ def lio_target_set_tpg_param(option, opt_str, value, parser): lio_err("Unable to write tpg attr: " + param_dir + "/" + param) p.close() @@ -342,45 +324,28 @@ return -@@ -1257,12 +1263,12 @@ def lio_target_unload(option, opt_str, value, parser): - rmdir_op = "rmdir " + lio_root - ret = os.system(rmdir_op) - if ret: -- print "Unable to remove lio_root: " + lio_root -+ lio_err("Unable to remove lio_root: " + lio_root) - - rmmod_op = "rmmod iscsi_target_mod" - ret = os.system(rmmod_op) - if ret: -- print "Unable to unload iscsi_target_mod" -+ lio_err("Unable to unload iscsi_target_mod") - - return - -@@ -1271,8 +1277,13 @@ def lio_target_version(option, opt_str, value, parser): +@@ -1279,6 +1286,12 @@ def lio_target_version(option, opt_str, value, parser): os.system("cat /sys/kernel/config/target/iscsi/lio_version") return --def main(): +def lio_target_enable_debug(option, opt_str, value, parser): + global lio_debug - ++ + lio_debug = 1 + return + -+def main(): + def main(): + parser = OptionParser() - parser.add_option("--addlunacl", action="callback", callback=lio_target_add_lunacl, nargs=5, - type="string", dest="TARGET_IQN TPGT INITIATOR_IQN TPG_LUN MAPPED_LUN", help="Add iSCSI Initiator LUN ACL to LIO-Target Portal Group LUN") -@@ -1366,6 +1377,8 @@ def main(): +@@ -1374,6 +1387,8 @@ def main(): type="string", dest="TARGET_IQN TPGT LUN", help="Show ALUA Target Port Group for LIO-Target Port/LUN") parser.add_option("--unload", action="callback", callback=lio_target_unload, nargs=0, help="Unload LIO-Target") + parser.add_option("--debug", action="callback", callback=lio_target_enable_debug, nargs=0, -+ help="Enable debugging output") ++ help="Enable debugging output") parser.add_option("--version", action="callback", callback=lio_target_version, nargs=0, help="Display LIO-Target version information") -- -1.7.10.4 +1.8.1.4 ++++++ 0014-Add-shell-header-when-dumping-configuration.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:48.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:48.000000000 +0200 @@ -1,4 +1,4 @@ -From 9d7a6412f167167f67be3ee8d3710257c628defb Mon Sep 17 00:00:00 2001 +From 3601de1f68eee23616932079c151700b32edd1a8 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Fri, 1 Feb 2013 13:07:55 +0100 Subject: Add shell header when dumping configuration @@ -8,12 +8,12 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> --- - lio-py/lio_dump.py | 3 +++ - tcm-py/tcm_dump.py | 3 ++- + lio-py/lio_dump.py | 3 +++ + tcm-py/tcm_dump.py | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lio-py/lio_dump.py b/lio-py/lio_dump.py -index 6328161..34b232b 100755 +index 3e3461f..2a88f3a 100755 --- a/lio-py/lio_dump.py +++ b/lio-py/lio_dump.py @@ -16,6 +16,9 @@ def lio_target_configfs_dump(option, opt_str, value, parser): @@ -27,7 +27,7 @@ print "mkdir " + lio_root diff --git a/tcm-py/tcm_dump.py b/tcm-py/tcm_dump.py -index 6206ad9..47aba72 100755 +index 3963b51..e4a99e6 100755 --- a/tcm-py/tcm_dump.py +++ b/tcm-py/tcm_dump.py @@ -28,7 +28,8 @@ def tcm_dump_configfs(option, opt_str, value, parser): @@ -41,5 +41,5 @@ # Loop through ALUA Logical Unit Groups # Note that the 'default_lu_gp' is automatically created when -- -1.7.10.4 +1.8.1.4 ++++++ 0015-lio_node-Check-for-iscsi_target_mod.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:48.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:48.000000000 +0200 @@ -1,35 +1,29 @@ -From 97fcf70da6d0b7c1957126c2f8e6d8e8d6ba0169 Mon Sep 17 00:00:00 2001 +From 712245de9f21f3f5ce7da7ee7c910a3a7048f38c Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> -Date: Fri, 1 Feb 2013 14:02:51 +0100 -Subject: lio_node: Check for iscsi_target_mod +Date: Thu, 17 Apr 2014 09:46:45 +0200 +Subject: lio_node: Check for lio_root -iscsi_target_mod needs to be loaded, otherwise all functions -will fail. +The lio_root directory /sys/kernel/config/iscsi has to be +present, otherwise all functions will fail. Signed-off-by: Hannes Reinecke <hare@suse.de> --- - lio-py/lio_node.py | 8 ++++++++ - 1 file changed, 8 insertions(+) + lio-py/lio_node.py | 2 ++ + 1 file changed, 2 insertions(+) diff --git a/lio-py/lio_node.py b/lio-py/lio_node.py -index 55a9208..abea728 100755 +index d58213f..d047fc1 100755 --- a/lio-py/lio_node.py +++ b/lio-py/lio_node.py -@@ -1284,6 +1284,14 @@ def lio_target_enable_debug(option, opt_str, value, parser): +@@ -1293,6 +1293,8 @@ def lio_target_enable_debug(option, opt_str, value, parser): return def main(): -+ if not os.path.isdir(tcm_cfg): -+ lio_err("target_core_mod module not loaded"); + if not os.path.isdir(lio_root): -+ mkdir_op = "mkdir -p " + lio_root -+ ret = os.system(mkdir_op) -+ if ret: -+ lio_err("Unable to load iscsi_target_mod") -+ ++ lio_err("iscsi_target_mod is not loaded") + parser = OptionParser() parser.add_option("--addlunacl", action="callback", callback=lio_target_add_lunacl, nargs=5, - type="string", dest="TARGET_IQN TPGT INITIATOR_IQN TPG_LUN MAPPED_LUN", help="Add iSCSI Initiator LUN ACL to LIO-Target Portal Group LUN") -- -1.7.10.4 +1.8.1.4 ++++++ 0016-tcm_node-Check-for-target_core_mod.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:48.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:48.000000000 +0200 @@ -1,4 +1,4 @@ -From 8b8c1dda22ef160dcad6f597d5a8a500cede920b Mon Sep 17 00:00:00 2001 +From be58820def00a41465f6f6d49a649f4fa8450858 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Fri, 1 Feb 2013 14:04:53 +0100 Subject: tcm_node: Check for target_core_mod @@ -8,23 +8,22 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> --- - tcm-py/tcm_node.py | 3 +++ - 1 file changed, 3 insertions(+) + tcm-py/tcm_node.py | 2 ++ + 1 file changed, 2 insertions(+) diff --git a/tcm-py/tcm_node.py b/tcm-py/tcm_node.py -index a5b0ec0..39872e2 100755 +index e6913fd..527bc0a 100755 --- a/tcm-py/tcm_node.py +++ b/tcm-py/tcm_node.py -@@ -1299,6 +1299,9 @@ def tcm_enable_debug(option, opt_str, value, parser): - return +@@ -726,6 +726,8 @@ def dispatcher(option, opt_str, value, parser, orig_callback): + orig_callback(*value) def main(): -+ if not os.path.isdir(tcm_root): -+ tcm_err("target_core_mod module not loaded") -+ - parser = OptionParser() - parser.add_option("--addlungp", action="callback", callback=tcm_add_alua_lugp, nargs=1, - type="string", dest="lu_gp_name", help="Add ALUA Logical Unit Group") ++ if not os.path.isdir(tcm_root): ++ tcm_err("target_core_mod module not loaded") + + parser = OptionParser(version=tcm_version()) + -- -1.7.10.4 +1.8.1.4 ++++++ 0017-rc.target.suse-Clean-up-startup-sequence.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:49.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:49.000000000 +0200 @@ -1,4 +1,4 @@ -From e46e0be2d25644d14c31ff610aa72ebb97107270 Mon Sep 17 00:00:00 2001 +From 5c83b244ea0c767ed9aa2a10406cf7b34e6bfff7 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Fri, 1 Feb 2013 14:29:12 +0100 Subject: rc.target.suse: Clean up startup sequence @@ -9,14 +9,14 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> --- - scripts/rc.target.suse | 37 ++++++------------------------------- - 1 file changed, 6 insertions(+), 31 deletions(-) + scripts/rc.target.suse | 33 ++++++--------------------------- + 1 file changed, 6 insertions(+), 27 deletions(-) diff --git a/scripts/rc.target.suse b/scripts/rc.target.suse -index b639c8a..8533df5 100644 +index c812430..423c30a 100644 --- a/scripts/rc.target.suse +++ b/scripts/rc.target.suse -@@ -79,47 +79,22 @@ function tcm_check() { +@@ -101,43 +101,22 @@ function tcm_check() { } function run_fabric_cfs_ops() { @@ -55,10 +55,6 @@ - fi - # Skip emacs state files - if [[ $i =~ ~$ ]]; then -- continue -- fi -- # Skip configuration file -- if [ $i == "tcm.cfg" ] ; then + if [ ${i##*/} == "lio_start.sh" ]; then continue fi @@ -71,5 +67,5 @@ rc_failed 1 fi -- -1.7.10.4 +1.8.1.4 ++++++ 0018-lio_node-Make-add-idempotent.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:49.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:49.000000000 +0200 @@ -1,4 +1,4 @@ -From 132b2573fb3a9b58c937e88d4a5fe553e650a26e Mon Sep 17 00:00:00 2001 +From d16a16f730c179ad0fb1d88f650c63017e28c247 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Fri, 1 Feb 2013 14:49:03 +0100 Subject: lio_node: Make 'add' idempotent @@ -8,14 +8,14 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> --- - lio-py/lio_node.py | 34 ++++++++++++++++------------------ + lio-py/lio_node.py | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/lio-py/lio_node.py b/lio-py/lio_node.py -index abea728..db6b94f 100755 +index d047fc1..d1cf7ee 100755 --- a/lio-py/lio_node.py +++ b/lio-py/lio_node.py -@@ -320,13 +320,12 @@ def lio_target_add_port(option, opt_str, value, parser): +@@ -319,13 +319,12 @@ def lio_target_add_port(option, opt_str, value, parser): lun_dir = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/lun/lun_" + lun if os.path.isdir(lun_dir): @@ -35,7 +35,7 @@ port_src = tcm_root + "/" + tcm_obj port_dst = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/lun/lun_" + lun + "/" + port_name -@@ -350,16 +349,15 @@ def lio_target_add_tpg(option, opt_str, value, parser): +@@ -349,16 +348,15 @@ def lio_target_add_tpg(option, opt_str, value, parser): tpg_dir = lio_root + "/" + iqn + "/tpgt_" + tpgt if os.path.isdir(tpg_dir): @@ -61,7 +61,7 @@ return def __lio_target_del_port(option, opt_str, value, parser): -@@ -408,7 +406,7 @@ def lio_target_del_port(option, opt_str, value, parser): +@@ -407,7 +405,7 @@ def lio_target_del_port(option, opt_str, value, parser): lun_dir = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/lun/lun_" + lun if os.path.isdir(lun_dir) == False: @@ -71,5 +71,5 @@ __lio_target_del_port(option, opt_str, value, parser) # Delete the ALUA secondary metadata file for this Port/LUN -- -1.7.10.4 +1.8.1.4 ++++++ 0019-rc.target.suse-Separate-tcm_-.sh-and-lio_-.sh-during.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:49.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:49.000000000 +0200 @@ -1,4 +1,4 @@ -From 10eea1b3eb2b5267966aa841ce72b154cf42f54a Mon Sep 17 00:00:00 2001 +From c4840b6400fd71937ac0f378993af8849c5de119 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Fri, 1 Feb 2013 15:00:02 +0100 Subject: rc.target.suse: Separate tcm_*.sh and lio_*.sh during startup @@ -9,14 +9,14 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> --- - scripts/rc.target.suse | 16 ++++++++++++++-- + scripts/rc.target.suse | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/scripts/rc.target.suse b/scripts/rc.target.suse -index 8533df5..88de82f 100644 +index 423c30a..dacdb77 100644 --- a/scripts/rc.target.suse +++ b/scripts/rc.target.suse -@@ -79,7 +79,7 @@ function tcm_check() { +@@ -101,7 +101,7 @@ function tcm_check() { } function run_fabric_cfs_ops() { @@ -25,7 +25,7 @@ if [ ! -f $i ]; then continue -@@ -88,12 +88,24 @@ function run_fabric_cfs_ops() { +@@ -110,12 +110,24 @@ function run_fabric_cfs_ops() { if [ ${i##*/} == "tcm_start.sh" ]; then continue fi @@ -52,5 +52,5 @@ if [ $RET != 0 ]; then rc_failed 1 -- -1.7.10.4 +1.8.1.4 ++++++ 0020-tcm_dump-Error-checking-in-startup-script.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:49.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:49.000000000 +0200 @@ -1,4 +1,4 @@ -From 08e8c8bd9abe71e8af168322f138ffbdf6dea176 Mon Sep 17 00:00:00 2001 +From ff05d56bf0770fb688836e7be6ca88622c74c36f Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Fri, 1 Feb 2013 15:11:30 +0100 Subject: tcm_dump: Error checking in startup script @@ -8,11 +8,11 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> --- - tcm-py/tcm_dump.py | 53 +++++++++++++--------------------------------------- - 1 file changed, 13 insertions(+), 40 deletions(-) + tcm-py/tcm_dump.py | 52 ++++++++++++++-------------------------------------- + 1 file changed, 14 insertions(+), 38 deletions(-) diff --git a/tcm-py/tcm_dump.py b/tcm-py/tcm_dump.py -index 47aba72..5253d14 100755 +index e4a99e6..9e182b1 100755 --- a/tcm-py/tcm_dump.py +++ b/tcm-py/tcm_dump.py @@ -39,7 +39,12 @@ def tcm_dump_configfs(option, opt_str, value, parser): @@ -94,7 +94,7 @@ # Dump the ALUA types tg_pt_gp_type_file = dev_root + g + "/alua/" + tg_pt_gp + "/alua_access_type" p = os.open(tg_pt_gp_type_file, 0) -@@ -213,43 +223,6 @@ def tcm_dump_configfs(option, opt_str, value, parser): +@@ -213,41 +223,7 @@ def tcm_dump_configfs(option, opt_str, value, parser): print "echo " + value.rstrip() + " > " + attrib_file os.close(p) @@ -133,11 +133,10 @@ - - if snap_enabled == 1: - print "tcm_node --lvsnapstart " + f + "/" + g -- -- - return ++ return def tcm_backup_to_file(option, opt_str, value, parser): + datetime = str(value) -- -1.7.10.4 +1.8.1.4 ++++++ 0021-lio_dump-Error-checking-in-startup-script.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:49.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:49.000000000 +0200 @@ -1,4 +1,4 @@ -From 01fb5fb0ca173e580f3ee1beaa036ebee4620319 Mon Sep 17 00:00:00 2001 +From 4d066c3367b339cf1070924f1a46a0c1cc14f865 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Fri, 1 Feb 2013 15:20:29 +0100 Subject: lio_dump: Error checking in startup script @@ -8,11 +8,11 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> --- - lio-py/lio_dump.py | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) + lio-py/lio_dump.py | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lio-py/lio_dump.py b/lio-py/lio_dump.py -index 34b232b..351c2b1 100755 +index 2a88f3a..c6a3600 100755 --- a/lio-py/lio_dump.py +++ b/lio-py/lio_dump.py @@ -21,7 +21,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): @@ -24,18 +24,15 @@ print "#### iSCSI Discovery authentication information" auth_dir = lio_root + "/discovery_auth" if os.path.isdir(auth_dir) == True: -@@ -60,7 +60,9 @@ def lio_target_configfs_dump(option, opt_str, value, parser): - print "#### Network portals for iSCSI Target Portal Group" - np_root = os.listdir(lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np") +@@ -62,6 +62,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): for np in np_root: -- print "mkdir -p " + lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np/" + np -+ np_root_dir = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np/" + np -+ print "mkdir -p " + np_root_dir + np_path = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np/" + np + print "mkdir -p " + np_path + print "[ $? -eq 0 ] || exit 1" - - print "#### iSCSI Target Ports" - lun_root = os.listdir(lio_root + "/" + iqn + "/tpgt_" + tpgt + "/lun") -@@ -70,6 +72,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): + np_path_iser = np_path + "/iser" + if os.path.isfile(np_path_iser): + iser_fd = open(np_path_iser, 'r') +@@ -78,6 +79,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): lun_dir = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/lun/lun_" + lun print "mkdir -p " + lun_dir @@ -43,7 +40,7 @@ port_root = os.listdir(lun_dir) for port in port_root: -@@ -89,6 +92,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): +@@ -97,6 +99,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): sourcelink = os.readlink(port_link) sourcelink2 = os.path.join(os.path.dirname(port_link), sourcelink) print "ln -s " + sourcelink2 + " " + port_link @@ -51,7 +48,7 @@ # Dump ALUA Target Port Group tg_pt_gp_file = lun_dir + "/alua_tg_pt_gp" -@@ -112,6 +116,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): +@@ -120,6 +123,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): print "echo " + tg_pt_gp_name + " > " + tg_pt_gp_file print "lio_node --aluasecmd " + iqn + " " + tpgt + " " + lun @@ -59,7 +56,7 @@ # Dump values of iscsi/iqn/tpgt/attrib/ print "#### Attributes for iSCSI Target Portal Group" -@@ -157,6 +162,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): +@@ -165,6 +169,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): nacl_root = os.listdir(nacl_dir) for nacl in nacl_root: print "mkdir -p " + nacl_dir + nacl @@ -67,7 +64,7 @@ tcq_depth_file = nacl_dir + nacl + "/cmdsn_depth" p = os.open(tcq_depth_file, 0) value = os.read(p, 8) -@@ -198,6 +204,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): +@@ -206,6 +211,7 @@ def lio_target_configfs_dump(option, opt_str, value, parser): continue lun_link_dir = nacl_dir + nacl + "/" + lun_acl print "mkdir -p " + lun_link_dir @@ -76,5 +73,5 @@ for lun_acl_link in os.listdir(lun_link_dir): if lun_acl_link == "write_protect": -- -1.7.10.4 +1.8.1.4 ++++++ 0022-rc.target.suse-Save-configuration-during-shutdown.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:49.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:49.000000000 +0200 @@ -1,4 +1,4 @@ -From 198a843e03ba2402c5cc8037ceab6b732fa44c9f Mon Sep 17 00:00:00 2001 +From 933c950ccef79e17330f76a3bb74a71279bf17f4 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Fri, 1 Feb 2013 15:47:13 +0100 Subject: rc.target.suse: Save configuration during shutdown @@ -10,14 +10,14 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> --- - scripts/rc.target.suse | 29 +++++++++++------------------ + scripts/rc.target.suse | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/scripts/rc.target.suse b/scripts/rc.target.suse -index 88de82f..a998848 100644 +index dacdb77..20fc454 100644 --- a/scripts/rc.target.suse +++ b/scripts/rc.target.suse -@@ -216,17 +216,12 @@ start () { +@@ -239,17 +239,12 @@ start () { rc_status -v return 0 fi @@ -39,7 +39,7 @@ if [ -e ${SEMA_TARGET} ]; then RETVAL=1 echo -n "See ${SEMA_TARGET}" -@@ -234,8 +229,8 @@ start () { +@@ -257,8 +252,8 @@ start () { return $RETVAL fi @@ -50,7 +50,7 @@ echo "$0: Created: " `date` > ${SEMA_TARGET} echo "$0: " >> ${SEMA_TARGET} echo "$0: This file has been created as a result of a potentially" >> ${SEMA_TARGET} -@@ -246,12 +241,6 @@ start () { +@@ -269,12 +264,6 @@ start () { echo "$0: You must remove /var/crash/target.fault before attempting" >> ${SEMA_TARGET} echo "$0: to start again." >> ${SEMA_TARGET} echo "$0: " >> ${SEMA_TARGET} @@ -63,7 +63,7 @@ if [ -e ${LOCK_TARGET} ]; then rm -f ${SEMA_TARGET} -@@ -292,10 +281,14 @@ stop () { +@@ -315,10 +304,14 @@ stop () { rc_status -v return; fi @@ -80,5 +80,5 @@ return $RET } -- -1.7.10.4 +1.8.1.4 ++++++ 0023-Use-OPTFLAGS-when-compiling.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:49.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:49.000000000 +0200 @@ -1,9 +1,12 @@ -From bae6f3da1aa6ccea165917d66c1b74f9d9923aac Mon Sep 17 00:00:00 2001 +From 5681a54afd2ddc1325a106f668481fa908ec39c9 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Wed, 18 Dec 2013 14:56:54 +0100 -Subject: [PATCH] Use 'OPTFLAGS' when compiling mib-modules +Subject: Use 'OPTFLAGS' when compiling mib-modules Signed-off-by: Hannes Reinecke <hare@suse.de> +--- + mib-modules/Makefile | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mib-modules/Makefile b/mib-modules/Makefile index 0d54c9b..49cd175 100644 @@ -19,3 +22,6 @@ #CFLAGS +=$(AUTO_CFLAGS) LD = gcc -shared +-- +1.8.1.4 + ++++++ 0024-lio_node-do-not-fail-if-target-port-is-already-disab.patch ++++++ --- /var/tmp/diff_new_pack.mGDGIt/_old 2014-05-02 13:59:49.000000000 +0200 +++ /var/tmp/diff_new_pack.mGDGIt/_new 2014-05-02 13:59:49.000000000 +0200 @@ -1,7 +1,7 @@ -From 14722ab97272df00c30d7619a74b420659e6ad98 Mon Sep 17 00:00:00 2001 +From 7948ff48615b3102c44a860fe21ef1d17bae63b5 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Mon, 31 Mar 2014 14:36:02 +0200 -Subject: [PATCH] lio_node: do not fail if target port is already disabled +Subject: lio_node: do not fail if target port is already disabled When calling 'lio_node --unload' the command should not fail if the target port is already disabled. @@ -14,10 +14,10 @@ 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/lio-py/lio_node.py b/lio-py/lio_node.py -index db6b94f..725ee94 100755 +index d1cf7ee..51faef6 100755 --- a/lio-py/lio_node.py +++ b/lio-py/lio_node.py -@@ -97,7 +97,6 @@ def lio_alua_process_secondary_md(option, opt_str, value, parser): +@@ -83,7 +83,6 @@ def lio_alua_process_secondary_md(option, opt_str, value, parser): # LIO-Target endpoint (iqn+tpgt) exists.. lio_alua_check_secondary_md(iqn, tpgt) lio_alua_set_secondary_write_md(iqn, tpgt, lun) @@ -25,14 +25,14 @@ return # print "Using alua_sec_md_file: " + alua_sec_md_file -@@ -202,10 +201,15 @@ def __lio_target_del_tpg(option, opt_str, value, parser, delete_tpg_md): +@@ -188,10 +187,15 @@ def __lio_target_del_tpg(option, opt_str, value, parser, delete_tpg_md): # This will set TPG Status to INACTIVE force all of the iSCSI sessions for this # tiqn+tpgt tuple to be released. - disable_op = "echo 0 > " + lio_root + "/" + iqn + "/tpgt_" + tpgt + "/enable" - ret = os.system(disable_op) - if ret: -- lio_err("Unable to disable TPG: " + iqn + " TPGT: " + tpgt) +- print "Unable to disable TPG: " + iqn + " TPGT: " + tpgt + enable_path = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/enable" + p = os.open(enable_path, 0); + value = os.read(p, 8) @@ -45,7 +45,7 @@ np_root = os.listdir(lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np") for np in np_root: -@@ -509,12 +513,17 @@ def lio_target_disable_tpg(option, opt_str, value, parser): +@@ -508,12 +512,17 @@ def lio_target_disable_tpg(option, opt_str, value, parser): iqn = iqn.lower(); tpgt = str(value[1]); ++++++ 0025-target.service-Add-systemd-service-file.patch ++++++
From 453b7d82a2a1787043a6026634321fc05ed09c41 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Thu, 17 Apr 2014 09:36:02 +0200 Subject: target.service: Add systemd service file
Signed-off-by: Hannes Reinecke <hare@suse.de> --- scripts/target.service | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 scripts/target.service diff --git a/scripts/target.service b/scripts/target.service new file mode 100644 index 0000000..212e9a2 --- /dev/null +++ b/scripts/target.service @@ -0,0 +1,19 @@ +[Unit] +Description="Generic Target Mode service" + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart="/etc/target/tcm_start.sh" +ExecStart="/etc/target/lio_start.sh" +ExecStartPost=-"/etc/target/tcm_setup.sh" +ExecStartPost=-"/etc/target/lio_setup.sh" + +ExecStopPre="/usr/sbin/lio_dump --stdout > /etc/target/lio_setup.sh" +ExecStopPre="/usr/sbin/tcm_setup --stdout > /etc/target/tcm_setup.sh" +ExecStop="/usr/sbin/tcm_fabric --unloadall" +ExecStop="/usr/sbin/lio_node --unload" +ExecStopPost="/usr/sbin/tcm_node --unload" + +[Install] +WantedBy=sysinit.target -- 1.8.1.4 ++++++ 0026-iscsiMib.c-fixes-for-strict-aliasing.patch ++++++
From da77229050bb604c916ffd567b58e0fed236748b Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Thu, 17 Apr 2014 12:03:50 +0200 Subject: iscsiMib.c: fixes for strict aliasing
gcc is becoming more and more picky about how valid C-code should look like, so fixup iscsiMib.c to eliminate the strict aliasing warnings. Signed-off-by: Hannes Reinecke <hare@suse.de> --- mib-modules/iscsiMib.c | 46 ++++++++++++++++++++-------------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/mib-modules/iscsiMib.c b/mib-modules/iscsiMib.c index e2e1ed4..5e5ba51 100644 --- a/mib-modules/iscsiMib.c +++ b/mib-modules/iscsiMib.c @@ -809,8 +809,7 @@ iscsiPortalAttributes_load(netsnmp_cache *cache, void *vmagic) while (line == fgets(line, sizeof(line), fp)) { memset(&tmp, 0, sizeof(tmp)); if (sscanf(line, ISCSI_PORTAL_ATTR_LINE, &tmp.iscsiInstIndex, - &tmp.iscsiPortalIndex, roles, addrType, - (u_int *)tmp.iscsiPortalAddr, proto, + &tmp.iscsiPortalIndex, roles, addrType, &addr, proto, &tmp.iscsiPortalMaxRecvDataSegLength, hdrDigest, dataDigest, rcvMarker) != 10) continue; @@ -819,8 +818,7 @@ iscsiPortalAttributes_load(netsnmp_cache *cache, void *vmagic) tmp.iscsiPortalRoles = NODE_ROLE_TARGET; if (!strcmp(addrType, "ipv4")) { tmp.iscsiPortalAddrType = INET_ADDR_TYPE_IPV4; - addr = htonl(*(uint32_t *)&tmp.iscsiPortalAddr); - *(uint32_t *)tmp.iscsiPortalAddr = addr; + *tmp.iscsiPortalAddr = htonl(addr); } if (!strcmp(proto, "TCP")) @@ -1733,42 +1731,41 @@ iscsiTargetAttributes_load(unsigned int clientreg, void *clientarg) //snmp_log(LOG_DEBUG, "snmpd: cannot open %s\n", PROC_TARGET_ATTR); return; } - + while (line == fgets(line, sizeof(line), fp)) { memset(&tmp, 0, sizeof(tmp)); if (sscanf(line, ISCSI_TARGET_ATTR_LINE, &tmp.iscsiInstIndex, &tmp.iscsiNodeIndex, &tmp.iscsiTgtLoginFailures, &tmp.iscsiTgtLastFailureTime, &failType, tmp.iscsiTgtLastIntrFailureName, addrType, - (u_int *)tmp.iscsiTgtLastIntrFailureAddr) != 8) + &addr) != 8) continue; memcpy(tmp.iscsiTgtLastFailureType, iscsiTgtLoginStats_oid, - sizeof(iscsiTgtLoginStats_oid)); - tmp.iscsiTgtLastFailureType[OID_LENGTH(iscsiTgtLoginStats_oid)] = - failType; + sizeof(iscsiTgtLoginStats_oid)); + tmp.iscsiTgtLastFailureType[OID_LENGTH(iscsiTgtLoginStats_oid)] = + failType; tmp.iscsiTgtLastFailureType_len = OID_LENGTH(iscsiTgtLoginStats_oid)+1; if (!strcmp(addrType, "ipv4")) { tmp.iscsiTgtLastIntrFailureAddrType = INET_ADDR_TYPE_IPV4; - addr = htonl(*(uint32_t *)tmp.iscsiTgtLastIntrFailureAddr); - *(uint32_t *)tmp.iscsiTgtLastIntrFailureAddr = addr; + *tmp.iscsiTgtLastIntrFailureAddr = htonl(addr); } /* Send a trap on failures */ - if ((tmp.iscsiInstIndex <= ISCSI_NUM_INSTANCES) && + if ((tmp.iscsiInstIndex <= ISCSI_NUM_INSTANCES) && (tmp.iscsiNodeIndex <= ISCSI_NUM_NODES) && - (tmp.iscsiTgtLoginFailures > - numFailures[tmp.iscsiInstIndex][tmp.iscsiNodeIndex])) { + (tmp.iscsiTgtLoginFailures > + numFailures[tmp.iscsiInstIndex][tmp.iscsiNodeIndex])) { if ((clientreg) && ((failType == ISCSI_LOGIN_FAIL_AUTHORIZE) || (failType == ISCSI_LOGIN_FAIL_AUTHENTICATE) || - (failType == ISCSI_LOGIN_FAIL_NEGOTIATE))) + (failType == ISCSI_LOGIN_FAIL_NEGOTIATE))) send_iscsiTgtLoginFailure_trap(&tmp); } /* Update the counter to the current value from the stack */ - if (numFailures[tmp.iscsiInstIndex][tmp.iscsiNodeIndex] != + if (numFailures[tmp.iscsiInstIndex][tmp.iscsiNodeIndex] != tmp.iscsiTgtLoginFailures) - numFailures[tmp.iscsiInstIndex][tmp.iscsiNodeIndex] = + numFailures[tmp.iscsiInstIndex][tmp.iscsiNodeIndex] = tmp.iscsiTgtLoginFailures; entry = SNMP_MALLOC_TYPEDEF(struct iscsiTargetAttributes_entry); @@ -3572,7 +3569,7 @@ iscsiCxnAttributes_load(netsnmp_cache *cache, void *vmagic) char dataDgst[16]; char rcvMarker[4]; char sendMarker[4]; - uint32_t addr; + uint32_t local_addr, remote_addr; struct iscsiCxnAttributes_entry tmp, *entry; if (iscsiCxnAttributes_head) @@ -3582,14 +3579,14 @@ iscsiCxnAttributes_load(netsnmp_cache *cache, void *vmagic) //snmp_log(LOG_DEBUG, "snmpd: cannot open %s\n", PROC_CXN_ATTR); return -1; } - + while (line == fgets(line, sizeof(line), fp)) { memset(&tmp, 0, sizeof(tmp)); if (sscanf(line, ISCSI_CXN_ATTR_LINE, &tmp.iscsiInstIndex, &tmp.iscsiSsnNodeIndex, &tmp.iscsiSsnIndex, &tmp.iscsiCxnIndex, &tmp.iscsiCxnCid, cxnState, addrType, - (u_int *)tmp.iscsiCxnLocalAddr, proto, - &tmp.iscsiCxnLocalPort, (u_int *)tmp.iscsiCxnRemoteAddr, + &local_addr, proto, + &tmp.iscsiCxnLocalPort, &remote_addr, &tmp.iscsiCxnRemotePort, &tmp.iscsiCxnMaxRecvDataSegLength, &tmp.iscsiCxnMaxXmitDataSegLength, hdrDgst, dataDgst, rcvMarker, sendMarker, &tmp.iscsiCxnVersionActive) != 19) @@ -3605,11 +3602,8 @@ iscsiCxnAttributes_load(netsnmp_cache *cache, void *vmagic) if (!strcmp(addrType, "ipv4")) { tmp.iscsiCxnAddrType = INET_ADDR_TYPE_IPV4; - addr = htonl(*(uint32_t *)tmp.iscsiCxnLocalAddr); - *(uint32_t *)tmp.iscsiCxnLocalAddr = addr; - - addr = htonl(*(uint32_t *)tmp.iscsiCxnRemoteAddr); - *(uint32_t *)tmp.iscsiCxnRemoteAddr = addr; + *tmp.iscsiCxnLocalAddr = htonl(local_addr); + *tmp.iscsiCxnRemoteAddr = htonl(remote_addr); } if (!strcmp(proto, "TCP")) -- 1.8.1.4 ++++++ 0027-Compile-tools-with-OPTFLAGS.patch ++++++
From f49590e68397b011842232dcdd71497a5bd44f12 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Thu, 17 Apr 2014 12:06:35 +0200 Subject: Compile tools with OPTFLAGS
Signed-off-by: Hannes Reinecke <hare@suse.de> --- tools/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/Makefile b/tools/Makefile index 79ed3cd..3ff026a 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -6,7 +6,7 @@ ISCSI_NAME_OBJS = $(ISCSI_NAME_SRCS:.c=.o) all:: $(ISCSI_NAME) $(ISCSI_NAME): $(ISCSI_NAME_OBJS) - $(CC) -o $@ $(CFLAGS) $(ISCSI_NAME_OBJS) + $(CC) -o $@ $(CFLAGS) $(OPTFLAGS) $(ISCSI_NAME_OBJS) clean: rm -f $(ISCSI_NAME_OBJS) $(ISCSI_NAME) -- 1.8.1.4 ++++++ 0101-Remove-tcm_snap.py-from-package-scripts.patch ++++++
From 595cd43e38ebd19813b91a3db35f3a707d2ba475 Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@linux-iscsi.org> Date: Wed, 4 May 2011 15:49:14 -0700 Subject: Remove tcm_snap.py from package scripts
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org> --- autoconfig | 4 ---- debian/postinst | 5 ----- debian/prerm | 4 ---- tcm-py/install.sh | 4 ---- tcm-py/setup.py | 2 +- tcm-py/uninstall.sh | 4 ---- 6 files changed, 1 insertion(+), 22 deletions(-) diff --git a/autoconfig b/autoconfig index 5f51028..eb925f4 100755 --- a/autoconfig +++ b/autoconfig @@ -365,8 +365,6 @@ sub make_target_user_rpm mode => 755}, "$py_inst_dir/tcm_fabric.py" => { original => "tcm-py/tcm_fabric.py", mode => 755}, - "$py_inst_dir/tcm_snap.py" => { original => "tcm-py/tcm_snap.py", - mode => 755}, "/sbin/iscsi-name" => { original => "tools/iscsi-name", mode => 755}, "$py_inst_dir/lio_node.py" => { original => "lio-py/lio_node.py", @@ -378,7 +376,6 @@ sub make_target_user_rpm $iscsid->{post} .= "if [ ! -h /usr/sbin/tcm_node ]; then ln -s $py_inst_dir/tcm_node.py /usr/sbin/tcm_node; fi; "; $iscsid->{post} .= "if [ ! -h /usr/sbin/tcm_dump ]; then ln -s $py_inst_dir/tcm_dump.py /usr/sbin/tcm_dump ; fi; "; $iscsid->{post} .= "if [ ! -h /usr/sbin/tcm_fabric ]; then ln -s $py_inst_dir/tcm_fabric.py /usr/sbin/tcm_fabric ; fi; "; - $iscsid->{post} .= "if [ ! -h /usr/sbin/tcm_snap ]; then ln -s $py_inst_dir/tcm_snap.py /usr/sbin/tcm_snap ; fi; "; $iscsid->{post} .= "if [ ! -h /usr/sbin/lio_node ]; then ln -s $py_inst_dir/lio_node.py /usr/sbin/lio_node ; fi;"; $iscsid->{post} .= "if [ ! -h /usr/sbin/lio_dump ]; then ln -s $py_inst_dir/lio_dump.py /usr/sbin/lio_dump ; fi;"; @@ -386,7 +383,6 @@ sub make_target_user_rpm $iscsid->{preun} .= " unlink /usr/sbin/tcm_node ;"; $iscsid->{preun} .= " unlink /usr/sbin/tcm_dump ;"; $iscsid->{preun} .= " unlink /usr/sbin/tcm_fabric ;"; - $iscsid->{preun} .= " unlink /usr/sbin/tcm_snap ;"; $iscsid->{preun} .= " unlink /usr/sbin/lio_node ;"; $iscsid->{preun} .= " unlink /usr/sbin/lio_dump ;"; $iscsid->{preun} .= "fi; "; diff --git a/debian/postinst b/debian/postinst index 0b3b223..9ea01e3 100755 --- a/debian/postinst +++ b/debian/postinst @@ -16,11 +16,6 @@ if [ ! -h /usr/sbin/tcm_node ]; then ln -s $INSTALL_PATH/tcm_node.py /usr/sbin/tcm_node; fi -if [ ! -h /usr/sbin/tcm_snap ]; then - chmod a+x $INSTALL_PATH/tcm_snap.py; - ln -s $INSTALL_PATH/tcm_snap.py /usr/sbin/tcm_snap; -fi - if [ ! -h /usr/sbin/tcm_loop ]; then chmod a+x $INSTALL_PATH/tcm_loop.py; ln -s $INSTALL_PATH/tcm_loop.py /usr/sbin/tcm_loop; diff --git a/debian/prerm b/debian/prerm index 11bcf90..bd0f6f2 100755 --- a/debian/prerm +++ b/debian/prerm @@ -14,10 +14,6 @@ if [ -h /usr/sbin/tcm_node ]; then unlink /usr/sbin/tcm_node; fi -if [ -h /usr/sbin/tcm_snap ]; then - unlink /usr/sbin/tcm_snap; -fi - if [ -h /usr/sbin/tcm_loop ]; then unlink /usr/sbin/tcm_loop; fi diff --git a/tcm-py/install.sh b/tcm-py/install.sh index 95fc87b..cbb39ae 100755 --- a/tcm-py/install.sh +++ b/tcm-py/install.sh @@ -4,7 +4,6 @@ SITE_PACKAGES=`python ../get-py-modules-path.py` chmod a+x $SITE_PACKAGES/tcm_node.py chmod a+x $SITE_PACKAGES/tcm_dump.py -chmod a+x $SITE_PACKAGES/tcm_snap.py chmod a+x $SITE_PACKAGES/tcm_loop.py chmod a+x $SITE_PACKAGES/tcm_fabric.py @@ -14,9 +13,6 @@ fi if [ ! -f /usr/sbin/tcm_dump ]; then ln -s $SITE_PACKAGES/tcm_dump.py /usr/sbin/tcm_dump fi -if [ ! -f /usr/sbin/tcm_snap ]; then - ln -s $SITE_PACKAGES/tcm_snap.py /usr/sbin/tcm_snap -fi if [ ! -f /usr/sbin/tcm_loop ]; then ln -s $SITE_PACKAGES/tcm_loop.py /usr/sbin/tcm_loop fi diff --git a/tcm-py/setup.py b/tcm-py/setup.py index 6463518..437b758 100755 --- a/tcm-py/setup.py +++ b/tcm-py/setup.py @@ -12,6 +12,6 @@ setup (name='tcm', author_email='nab@linux-iscsi.org', url='http://linux-iscsi.org', license='GPL', - py_modules=['tcm_dump', 'tcm_fileio','tcm_iblock','tcm_node','tcm_pscsi','tcm_ramdisk','tcm_snap','tcm_loop','tcm_fabric'] + py_modules=['tcm_dump', 'tcm_fileio','tcm_iblock','tcm_node','tcm_pscsi','tcm_ramdisk','tcm_loop','tcm_fabric'] ) diff --git a/tcm-py/uninstall.sh b/tcm-py/uninstall.sh index a7bf0fb..d8cc10c 100755 --- a/tcm-py/uninstall.sh +++ b/tcm-py/uninstall.sh @@ -13,10 +13,6 @@ if [ -f /usr/sbin/tcm_loop ]; then rm /usr/sbin/tcm_loop fi -if [ -f /usr/sbin/tcm_snap ]; then - rm /usr/sbin/tcm_snap -fi - if [ -f /usr/sbin/tcm_fabric ]; then rm /usr/sbin/tcm_fabric fi -- 1.8.1.4 ++++++ 0102-Add-additional-rc.target-run_fabric_cfs_ops-exclusio.patch ++++++
From 4bd008b1e1fd2510fbedce012c07b8c4b7a80502 Mon Sep 17 00:00:00 2001 From: root <root@aerith.risingtidesystems.com> Date: Fri, 13 May 2011 11:04:44 -0700 Subject: Add additional rc.target:run_fabric_cfs_ops() exclusion cases
This patch adds the extra special exclusion cases in rc.target: run_fabric_cfs_ops() for .rpmorig, .rpmnew, .dpkg-dist and trailing /etc/target/fabric_start.sh~ cases to ensure these are not executed during /etc/init.d/target start Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org> (cherry picked from commit d2cf595d45895fcb0d1453aa74224d6edab244e5) --- scripts/rc.target | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/scripts/rc.target b/scripts/rc.target index b464f32..22c0350 100644 --- a/scripts/rc.target +++ b/scripts/rc.target @@ -111,12 +111,24 @@ function run_fabric_cfs_ops() { if [ $i == "lio_start.sh" ]; then continue fi - + # Skip RPM package save+orig+new if [[ $i =~ ".rpmsave" ]]; then continue fi - if [[ $i =~ ".dpkg-dist" ]]; then + if [[ $i =~ ".rpmorig" ]]; then + continue + fi + + if [[ $i =~ ".rpmnew" ]]; then + continue + fi + # Skip dpkg dist + if [[ $i =~ ".dpkg-dist" ]]; then + continue + fi + # Skip emacs state files + if [[ $i =~ ~$ ]]; then continue fi @@ -138,7 +150,7 @@ function run_fabric_cfs_ops() { else echo " [FAILED]" fi - + done } @@ -258,7 +270,7 @@ function load_tcm_mod() { } function shutdown_fabrics() { - + echo -n $"Unloading fabric/configfs: " ${TCM_FABRIC} --unloadall RETVAL=$? -- 1.8.1.4 ++++++ 0104-lio-utils-Fix-tools-build-breakage-with-dpkg-buildpa.patch ++++++
From d22e429c773bc9d023c95504c5bc3969b2a5f219 Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Sun, 18 Sep 2011 23:01:58 -0700 Subject: lio-utils: Fix tools/ build breakage with dpkg-buildpackage
Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- debian/rules | 1 + 1 file changed, 1 insertion(+) diff --git a/debian/rules b/debian/rules index aa991c8..0d812ad 100755 --- a/debian/rules +++ b/debian/rules @@ -42,6 +42,7 @@ install: build build: build-stamp build-stamp: dh_testdir + $(MAKE) DESTDIR=$(CURDIR)/debian/lio-utils -C tools cd tcm-py ; $(setup) build --build-base build/tcm-py/ install --no-compile --root=$(CWD)/debian/lio-utils/ # echo "2.5, 2.6" > $(install_dir)/lib/pylio/.version cd lio-py ; $(setup) build --build-base build/lio-py/ install --no-compile --root=$(CWD)/debian/lio-utils/ -- 1.8.1.4 ++++++ 0105-lio-utils-Remove-target-stop-start-from-debian-prerm.patch ++++++
From 853a85f4c4ef79d997c014b3f2b5af15ced4766e Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Sun, 18 Sep 2011 23:02:56 -0700 Subject: lio-utils: Remove target stop/start from debian prerm/postinst
Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- debian/postinst | 16 ++++++++-------- debian/prerm | 14 +++++++------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/debian/postinst b/debian/postinst index 9ea01e3..d4db93e 100755 --- a/debian/postinst +++ b/debian/postinst @@ -41,11 +41,11 @@ if [ ! -h /usr/sbin/lio_dump ]; then ln -s $INSTALL_PATH/lio_dump.py /usr/sbin/lio_dump; fi -if [ -x "/etc/init.d/target" ]; then - update-rc.d target defaults >/dev/null - if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then - invoke-rc.d target start || exit $? - else - /etc/init.d/target start || exit $? - fi -fi +#if [ -x "/etc/init.d/target" ]; then +# update-rc.d target defaults >/dev/null +# if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then +# invoke-rc.d target start || exit $? +# else +# /etc/init.d/target start || exit $? +# fi +#fi diff --git a/debian/prerm b/debian/prerm index bd0f6f2..73f8fbd 100755 --- a/debian/prerm +++ b/debian/prerm @@ -1,12 +1,12 @@ #!/bin/sh -if [ -x "/etc/init.d/target" ]; then - if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then - invoke-rc.d target stop || exit $? - else - /etc/init.d/target stop || exit $? - fi -fi +#if [ -x "/etc/init.d/target" ]; then +# if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then +# invoke-rc.d target stop || exit $? +# else +# /etc/init.d/target stop || exit $? +# fi +#fi update-rc.d -f target remove -- 1.8.1.4 ++++++ 0106-lio-utils-Convert-direct-unlink-call-to-os.unlink.patch ++++++
From 91b961032150016b7a32dd5aea81c6330917af20 Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Wed, 5 Oct 2011 23:46:42 -0700 Subject: lio-utils: Convert direct unlink call to os.unlink
Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- lio-py/lio_node.py | 8 ++++---- tcm-py/tcm_fabric.py | 8 ++++---- tcm-py/tcm_loop.py | 3 +-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lio-py/lio_node.py b/lio-py/lio_node.py index c08850d..d1e562e 100755 --- a/lio-py/lio_node.py +++ b/lio-py/lio_node.py @@ -361,9 +361,9 @@ def __lio_target_del_port(option, opt_str, value, parser): if not os.path.islink(lun_dir + "/" + port): continue - unlink_op = "unlink " + lun_dir + "/" + port + unlink_op = lun_dir + "/" + port # print "del_portunlink_op: " + unlink_op - ret = os.system(unlink_op) + ret = os.unlink(unlink_op) if ret: lio_err("Unable to unlink iSCSI Target Logical Unit") @@ -552,9 +552,9 @@ def lio_target_del_lunacl(option, opt_str, value, parser): if not os.path.islink(lun_link_dir + "/" + lun_acl_link): continue; - unlink_op = "unlink " + lio_root + "/" + iqn + "/tpgt_" + tpgt + "/acls/" + initiator_iqn + "/lun_" + mapped_lun + "/" + lun_acl_link + unlink_op = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/acls/" + initiator_iqn + "/lun_" + mapped_lun + "/" + lun_acl_link # print "unlink_op: " + unlink_op - ret = os.system(unlink_op) + ret = os.unlink(unlink_op) if ret: lio_err("Unable to unlink iSCSI Initiator Mapped LUN: " + mapped_lun + " ACL " + initiator_iqn + " for iSCSI Target Portal Group: " + iqn + " " + tpgt) diff --git a/tcm-py/tcm_fabric.py b/tcm-py/tcm_fabric.py index 88c7db4..49768e7 100755 --- a/tcm-py/tcm_fabric.py +++ b/tcm-py/tcm_fabric.py @@ -358,8 +358,8 @@ def fabric_unload(fabric_name, fabric_root, module_name): continue if os.path.islink(lun_link_dir + "/" + lun_acl_link): - unlink_op = "unlink " + lun_link_dir + "/" + lun_acl_link - ret = os.system(unlink_op) + unlink_op = lun_link_dir + "/" + lun_acl_link + ret = os.unlink(unlink_op) if ret: print "Unable to unlink MappedLUN: " + lun_link_dir + "/" + lun_acl_link @@ -383,8 +383,8 @@ def fabric_unload(fabric_name, fabric_root, module_name): if not os.path.islink(lun_dir + "/" + port): continue - unlink_op = "unlink " + lun_dir + "/" + port - ret = os.system(unlink_op) + unlink_op = lun_dir + "/" + port + ret = os.unlink(unlink_op) if ret: print "Unable to unlink fabric port/lun" diff --git a/tcm-py/tcm_loop.py b/tcm-py/tcm_loop.py index 74a6c1b..772222b 100755 --- a/tcm-py/tcm_loop.py +++ b/tcm-py/tcm_loop.py @@ -157,8 +157,7 @@ def tcm_loop_dellun(option, opt_str, value, parser): print "Active TCM_Loop port link does not exist!" sys.exit(1) - unlink_op = "unlink " + port_link - ret = os.system(unlink_op) + ret = os.unlink(port_link) if ret: print "Unable to unlink port for virtual SCSI Logical Unit: " + port sys.exit(1) -- 1.8.1.4 ++++++ 0010-lio_dump-Add-TPG-auth-attribute-check-for-lio_target.patch -> 0107-lio_dump-Add-TPG-auth-attribute-check-for-lio_target.patch ++++++ --- /work/SRC/openSUSE:Factory/lio-utils/0010-lio_dump-Add-TPG-auth-attribute-check-for-lio_target.patch 2014-01-02 11:15:02.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.lio-utils.new/0107-lio_dump-Add-TPG-auth-attribute-check-for-lio_target.patch 2014-05-02 13:59:47.000000000 +0200 @@ -1,4 +1,4 @@ -From 14f165c5e20a1adc2c18b90fa87303aafad98df3 Mon Sep 17 00:00:00 2001 +From eb55eee43e5a265a9a2f39f5b4d452a5d11dc8b9 Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Sat, 10 Dec 2011 00:04:24 -0800 Subject: lio_dump: Add TPG auth attribute check for lio_target_configfs_dump @@ -8,7 +8,7 @@ Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- - lio-py/lio_dump.py | 16 ++++++++++++++++ + lio-py/lio_dump.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lio-py/lio_dump.py b/lio-py/lio_dump.py @@ -39,5 +39,5 @@ print "#### Parameters for iSCSI Target Portal Group" param_dir = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/param/" -- -1.7.10.4 +1.8.1.4 ++++++ 0108-Handle-exception-in-cases-where-the-path-is-not-avai.patch ++++++
From 341f8838824c35d84637de8592dbe5c72e7749bf Mon Sep 17 00:00:00 2001 From: Ritesh Raj Sarraf <rrs@researchut.com> Date: Fri, 16 Mar 2012 01:51:17 +0530 Subject: Handle exception in cases where the path is not available
Please see, Debian bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=652052 This happens if you have lio installed but not enabled to start. Upon a new version installation, the pkg manager calls the stop target. With no kernel module loaded, this leads to tcm_fabric and tcm_node throwing out exceptions Signed-off-by: Ritesh Raj Sarraf <rrs@researchut.com> Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- tcm-py/tcm_fabric.py | 5 +++++ tcm-py/tcm_node.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/tcm-py/tcm_fabric.py b/tcm-py/tcm_fabric.py index 49768e7..2bdc77a 100755 --- a/tcm-py/tcm_fabric.py +++ b/tcm-py/tcm_fabric.py @@ -472,6 +472,11 @@ def fabric_unloadall(): continue fabric_unload(fabric_name, fabric_root, module_name) + except OSError, (errno, strerror): + if errno == 2: + print "%s %s\n" % (target_root, strerror) + print "Is kernel module loaded?\n" + exit 1 def do_work(stdout_enable, stdout_enable_all, date_time, unload, unloadall, fabric_name, fabric_root, module_name): diff --git a/tcm-py/tcm_node.py b/tcm-py/tcm_node.py index 4504d9b..b7c05cf 100755 --- a/tcm-py/tcm_node.py +++ b/tcm-py/tcm_node.py @@ -25,6 +25,11 @@ def tcm_err(msg): def tcm_read(filename): with open(filename) as f: return f.read() + except IOError, (errno, strerror): + if errno == 2: + print "%s %s\n" % (filename, strerror) + print "Is kernel module loaded?\n" + exit 1 def tcm_write(filename, value, newline=True): with open(filename, "w") as f: -- 1.8.1.4 ++++++ 0109-tighter-checks.patch ++++++
From 4f87d08987ab6332154cc37f81019de15a4af894 Mon Sep 17 00:00:00 2001 From: Ritesh Raj Sarraf <rrs@researchut.com> Date: Fri, 16 Mar 2012 01:23:40 +0530 Subject: tighter checks
Please see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=654262 for details. Thanks to Aurelien Jarno Signed-off-by: Ritesh Raj Sarraf <rrs@researchut.com> Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- scripts/rc.target | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/rc.target b/scripts/rc.target index 22c0350..7ad75a3 100644 --- a/scripts/rc.target +++ b/scripts/rc.target @@ -51,9 +51,9 @@ LIO_CONFIGFS_SCRIPT="/etc/target/lio_start.sh" # Enable: Set DEBUG=1 Disable: Set DEBUG=0 DEBUG=0 -LOGFILE=/tmp/tgtctl.dbug +LOGFILE=/var/log/tgtctl.dbug -if [ $DEBUG ]; then +if [ $DEBUG != 0 ]; then echo "$0 $*" >> $LOGFILE fi ######################################################################### -- 1.8.1.4 ++++++ 0110-Handle-exception-during-non-existent-files.patch ++++++
From 981500a47c4dd1821b1511ed300896ecdaa5eb48 Mon Sep 17 00:00:00 2001 From: Ritesh Raj Sarraf <rrs@researchut.com> Date: Thu, 10 May 2012 17:47:14 +0530 Subject: Handle exception during non-existent files
This could occur if the kernel moduel is not loaded Also fix, major typo, where I completely missed the try: block in the previously submitted patch. Sorry. Signed-off-by: Ritesh Raj Sarraf <rrs@researchut.com> Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- tcm-py/tcm_fabric.py | 37 ++++++++++++++++++++----------------- tcm-py/tcm_node.py | 21 ++++++++++++--------- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/tcm-py/tcm_fabric.py b/tcm-py/tcm_fabric.py index 2bdc77a..4e6dab1 100755 --- a/tcm-py/tcm_fabric.py +++ b/tcm-py/tcm_fabric.py @@ -9,6 +9,10 @@ import optparse target_root = "/sys/kernel/config/target/" spec_root = "/var/target/fabric/" +def fabric_err(msg): + print >> sys.stderr, msg + sys.exit(1) + def fabric_configfs_dump(fabric_name, fabric_root, module_name): if not os.path.isdir(fabric_root): @@ -455,28 +459,27 @@ def fabric_unloadall(): module_name = "" - for fabric_name in os.listdir(target_root): - if fabric_name == "version": - continue - if fabric_name == "core": - continue - # FIXME: currently using lio_node --unload - if fabric_name == "iscsi": - continue + try: + for fabric_name in os.listdir(target_root): + if fabric_name == "version": + continue + if fabric_name == "core": + continue + # FIXME: currently using lio_node --unload + if fabric_name == "iscsi": + continue - fabric_root = target_root + fabric_name - module_name = fabric_get_module_name(fabric_name) -# print "fabric_get_module_name() using: " + module_name + fabric_root = target_root + fabric_name + module_name = fabric_get_module_name(fabric_name) + #print "fabric_get_module_name() using: " + module_name - if module_name == "": - continue + if module_name == "": + continue - fabric_unload(fabric_name, fabric_root, module_name) + fabric_unload(fabric_name, fabric_root, module_name) except OSError, (errno, strerror): if errno == 2: - print "%s %s\n" % (target_root, strerror) - print "Is kernel module loaded?\n" - exit 1 + fabric_err("%s %s\n%s" % (target_root, strerror, "Is kernel module loaded?") ) def do_work(stdout_enable, stdout_enable_all, date_time, unload, unloadall, fabric_name, fabric_root, module_name): diff --git a/tcm-py/tcm_node.py b/tcm-py/tcm_node.py index b7c05cf..997009c 100755 --- a/tcm-py/tcm_node.py +++ b/tcm-py/tcm_node.py @@ -23,19 +23,22 @@ def tcm_err(msg): sys.exit(1) def tcm_read(filename): - with open(filename) as f: - return f.read() + try: + with open(filename) as f: + return f.read() except IOError, (errno, strerror): if errno == 2: - print "%s %s\n" % (filename, strerror) - print "Is kernel module loaded?\n" - exit 1 + tcm_err("%s %s\n%s" % (filename, strerror, "Is kernel module loaded?") ) def tcm_write(filename, value, newline=True): - with open(filename, "w") as f: - f.write(value) - if newline: - f.write("\n") + try: + with open(filename, "w") as f: + f.write(value) + if newline: + f.write("\n") + except IOError, (errno, strerror): + if errno == 2: + tcm_err("%s %s\n%s" % (filename, strerror, "Is kernel module loaded?") ) def tcm_full_path(arg): return tcm_root + "/" + arg -- 1.8.1.4 ++++++ 0111-tcm_node-Remove-target_core_stgt-shutdown-warning.patch ++++++
From 21c06cdeb05e8eaa22d2e5c914bddba7a558c448 Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Thu, 13 Sep 2012 13:44:48 -0700 Subject: tcm_node: Remove target_core_stgt shutdown warning
This patch removes the following warning during init.d/target stop: ERROR: Module target_core_stgt does not exist in /proc/modules as target_core_stgt is not currently an mainline backend driver nor included into RTS-OS. Reported-by: Michael Kromer <mek@risingtidesystems.com> Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- tcm-py/tcm_node.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tcm-py/tcm_node.py b/tcm-py/tcm_node.py index 997009c..7cd0217 100755 --- a/tcm-py/tcm_node.py +++ b/tcm-py/tcm_node.py @@ -186,7 +186,6 @@ def tcm_generate_uuid_for_unit_serial(dev_path): tcm_types = ( \ dict(name="pscsi", module=tcm_pscsi, gen_uuid=False), - dict(name="stgt", module=None, gen_uuid=True), dict(name="iblock", module=tcm_iblock, gen_uuid=True), dict(name="rd_dr", module=tcm_ramdisk, gen_uuid=True), dict(name="rd_mcp", module=tcm_ramdisk, gen_uuid=True), @@ -598,7 +597,7 @@ def tcm_unload(): tcm_del_alua_lugp(lu_gp) # Unload TCM subsystem plugin modules - for module in ("iblock", "file", "pscsi", "stgt"): + for module in ("iblock", "file", "pscsi"): os.system("rmmod target_core_%s" % module) # Unload TCM Core -- 1.8.1.4 ++++++ 0112-lio-utils-Add-init-script-for-SUSE.patch ++++++
From 9afa36a336ff203e34ae774998019b1ff84a05bc Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Tue, 9 Oct 2012 13:51:12 -0700 Subject: lio-utils: Add init script for SUSE
Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- scripts/rc.target.suse | 403 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 403 insertions(+) create mode 100644 scripts/rc.target.suse diff --git a/scripts/rc.target.suse b/scripts/rc.target.suse new file mode 100644 index 0000000..5e49f8f --- /dev/null +++ b/scripts/rc.target.suse @@ -0,0 +1,403 @@ +#!/bin/bash +# +# Filename: /etc/init.d/target +# target: Bring up/down target_core_mod and iscsi_target_mod v3.0 +# +# Bring up/down iscsi target networking +# +# chkconfig: 2345 18 01 +# description: Target_Core_Mod + LIO-target + ConfigFS v3.x +# config: /etc/sysconfig/target +# +######################################################################### +# + +# For SuSE, the following information is read by "insserv" program and the +# start/stoplinks are installed at appropriate runlevels. +# The network interface and logger has to be up for starting target service + +### BEGIN INIT INFO +# Provides: target +# Required-Start: $network $syslog +# Required-Stop: $network $syslog +# Default-Start: 2 3 5 +# Default-Stop: 0 1 6 +# Description: TCM/ConfigFS and LIO-Target +### END INIT INFO + +# Source function library. +. /etc/rc.status + +######################################################################### +# Our product file definitions + +MODNAME="target_core_mod" + +TCM_CFS_DIR="/sys/kernel/config/target/core" +LIO_CFS_DIR="/sys/kernel/config/target/iscsi" +FILE_TCFG="/etc/sysconfig/target" +LOCK_TARGET="/var/lock/subsys/target" +LOG_EVENT="/var/log/iscsi/target.log" +TCM_NODE="/usr/sbin/tcm_node" +LIO_NODE="/usr/sbin/lio_node" +TCM_FABRIC="/usr/sbin/tcm_fabric" +SEMA_TARGET="/var/crash/target.fault" +CONFIGFS_SCRIPT_DIR="/etc/target" +TCM_CONFIGFS_SCRIPT="/etc/target/tcm_start.sh" +LIO_CONFIGFS_SCRIPT="/etc/target/lio_start.sh" + +######################################################################### +# Allows saving command & arguments into a file for subsequent debugging +# Enable: Set DEBUG=1 Disable: Set DEBUG=0 + +DEBUG=0 +LOGFILE=/tmp/tgtctl.dbug + +if [ $DEBUG ]; then + echo "$0 $*" >> $LOGFILE +fi +######################################################################### + +ARGS_CHECK=2 +ARGS_COUNT=$# + +cd / # to avoid making the CWD unmountable + +######################################################################### + +PATH="/sbin:/bin:/usr/sbin:/usr/bin:$PATH" +RETVAL=0 + +function tcm_check() { + local RETVAL=0 + + if [ ! -f ${TCM_NODE} ]; then + echo "${TCM_NODE} does not exist" + RETVAL=1 + rc_failed $RETVAL + return $RETVAL + fi + + if [ ! -f ${LIO_NODE} ]; then + echo "${LIO_NODE} does not exist" + RETVAL=1 + rc_failed $RETVAL + return $RETVAL + fi + + if [ ! -d /var/target/pr ]; then + echo "/var/target/pr does not exist" + RETVAL=1 + rc_failed $RETVAL + return $RETVAL + fi + + if [ ! -d /var/target/alua ]; then + echo "/var/target/alua does not exist" + RETVAL=1 + rc_failed $RETVAL + fi + return $RETVAL +} + +function run_fabric_cfs_ops() { + for i in $( ls $CONFIGFS_SCRIPT_DIR); do + + CONFIGFS_SCRIPT_PATH="$CONFIGFS_SCRIPT_DIR/$i" + if [ ! -f $CONFIGFS_SCRIPT_PATH ]; then + continue + fi + # target core is handled in run_tcm_cfs_ops() + if [ $i == "tcm_start.sh" ]; then + continue + fi + # iscsi-target fabric module is handled in run_lio_target_cfs_ops() + if [ $i == "lio_start.sh" ]; then + continue + fi + # Skip RPM package save+orig+new + if [[ $i =~ ".rpmsave" ]]; then + continue + fi + + if [[ $i =~ ".rpmorig" ]]; then + continue + fi + + if [[ $i =~ ".rpmnew" ]]; then + continue + fi + # Skip dpkg dist + if [[ $i =~ ".dpkg-dist" ]]; then + continue + fi + # Skip emacs state files + if [[ $i =~ ~$ ]]; then + continue + fi + + echo -n $"Calling ConfigFS script $CONFIGFS_SCRIPT_PATH: " + sh ${CONFIGFS_SCRIPT_PATH} > /dev/null 2>&1 + if [ $RET != 0 ]; then + rc_failed 1 + fi + rc_status -v + done +} + +function run_lio_target_cfs_ops() { + if [ -f $LIO_CONFIGFS_SCRIPT ]; then + echo -n $"Calling $LIO_CONFIGFS_SCRIPT for iscsi_target_mod: " + sh ${LIO_CONFIGFS_SCRIPT} > /dev/null 2>&1 + RET=$? + if [ $RET != 0 ]; then + rc_failed 1 + fi + rc_status -v + fi +} + +function run_tcm_cfs_ops() { + if [ -f $TCM_CONFIGFS_SCRIPT ]; then + echo -n $"Calling $TCM_CONFIGFS_SCRIPT for target_core_mod: " + sh ${TCM_CONFIGFS_SCRIPT} > /dev/null 2>&1 + RET=$? + if [ $RET != 0 ]; then + rc_failed 1 + fi + rc_status -v + fi + + run_lio_target_cfs_ops + run_fabric_cfs_ops +} + +function check_configfs_mount() { + if [ ! -d /sys/kernel/config ]; then + modprobe configfs + mount -t configfs configfs /sys/kernel/config + RET=$? + if [ $RET != 0 ]; then + echo -n "ERROR: Unable to mount configfs on /sys/kernel/config" + rc_failed 1 + rc_exit + fi + fi +} + +function unload_lio_mode() { + echo -n "Unload Linux-iSCSI.org Fabric module" + rmmod iscsi_target_mod + rc_status -v +} + +function load_tcm_mod() { + check_configfs_mount + RETVAL=$? + if [ $RETVAL != 0 ]; then + rc_failed 1 + return 1 + fi + + echo -n $"Loading target_core_mod/ConfigFS core: " + modprobe -q ${MODNAME} > /dev/null + rc_status -v + + return 0 +} + +function shutdown_fabrics() { + + echo -n $"Unloading fabric/configfs: " + ${TCM_FABRIC} --unloadall + rc_status -v +} + +function shutdown_lio_mod () { + if [ -d /sys/kernel/config/target/iscsi/ ]; then + echo -n $"Unloading LIO-Target/ConfigFS fabric: " + ${LIO_NODE} --unload + rc_status -v + fi +} + +function unload_tcm_mod() { + local RETVAL=0 + if [ -d /sys/kernel/config/target ] ; then + shutdown_fabrics + shutdown_lio_mod + + echo -n $"Unloading target_core_mod/ConfigFS core: " + $TCM_NODE --unload + sleep 1 + RETVAL=$? + if [ $RETVAL != 0 ] ; then + rc_failed 1 + fi + rc_status -v + fi + return $RETVAL +} + +start () { + if [ -d ${TCM_CFS_DIR} ]; then + echo -n "target_core_mod/ConfigFS core already loaded" + rc_status -v + return 0 + fi + if test "x `lsmod | grep ${MODNAME} | awk '{ if ($$1 == "${MODNAME}") print $$1 }'`" == x ; then + return 0 + else + if [ -e ${LOCK_TARGET} ]; then + rm -f ${LOCK_TARGET} + fi + fi + +# Prevent multiple driver panics from hanging system (probably via scsi or target driver). +# HINT: Most likely cause is a problem within '/etc/iscsi/install.target'. +# Save a backup of the file, then NULL'd it to troubleshoot this variant. + if [ -e ${SEMA_TARGET} ]; then + RETVAL=1 + echo -n "See ${SEMA_TARGET}" + rc_failed $RETVAL + return $RETVAL + fi + +# Put message in semaphore file to aid in troubleshooting should +# the file still exist during a subsequent boot. + echo "$0: Created: " `date` > ${SEMA_TARGET} + echo "$0: " >> ${SEMA_TARGET} + echo "$0: This file has been created as a result of a potentially" >> ${SEMA_TARGET} + echo "$0: recursive module startup problem. Probable cause is an" >> ${SEMA_TARGET} + echo "$0: iSCSI device configuration problem which finds its way" >> ${SEMA_TARGET} + echo "$0: catastrophically into the Target Core Stack." >> ${SEMA_TARGET} + echo "$0: " >> ${SEMA_TARGET} + echo "$0: You must remove /var/crash/target.fault before attempting" >> ${SEMA_TARGET} + echo "$0: to start again." >> ${SEMA_TARGET} + echo "$0: " >> ${SEMA_TARGET} + echo "$0: Continued startup problems might be researched by saving" >> ${SEMA_TARGET} + echo "$0: off the current /etc/iscsi/install.target file and then" >> ${SEMA_TARGET} + echo "$0: replacing it with a dummy file which contains no entries." >> ${SEMA_TARGET} + echo "$0: If bootup is then successful, contact the iSCSI Target" >> ${SEMA_TARGET} + echo "$0: Stack manufacturer for assistance with problems within" >> ${SEMA_TARGET} + echo "$0: the target configuration file." >> ${SEMA_TARGET} + + if [ -e ${LOCK_TARGET} ]; then + rm -f ${SEMA_TARGET} + RETVAL=1 + echo -n "ERROR, target_core_mod already active" + rc_failed $RETVAL + return $RETVAL + fi + + load_tcm_mod + if [ $RETVAL != 0 ]; then + rm -f ${SEMA_TARGET} + return $RETVAL + fi + + sleep 1 + + ${PGM_SET_TNAME} + RETVAL=$? + if [ $RETVAL == 2 ]; then + rm -f ${SEMA_TARGET} + unload_tcm_mod + return $RETVAL + fi + + run_tcm_cfs_ops $1 + touch ${LOCK_TARGET} + rm -f ${SEMA_TARGET} + + return $RETVAL +} + +stop () { + rm -f ${SEMA_TARGET} + + if [ ! -d /sys/kernel/config/target ] ; then + echo -n "target_core_mod/ConfigFS core already unloaded" + rc_status -v + return; + fi + unload_tcm_mod + RET=$? + if [ $RET == 0 ]; then + rm -f ${LOCK_TARGET} + fi + return $RET +} + +function lio_version () { + if [ ! -d ${LIO_CFS_DIR} ]; then + exit 1 + fi + + lio_node --version +} + +function lio_status () { + if [ ! -d ${LIO_CFS_DIR} ]; then + exit 1 + fi + + lio_node --listendpoints +} + +function tcm_version () { + if [ ! -d ${TCM_CFS_DIR} ]; then + exit 1 + fi + + tcm_node --version +} + +function tcm_status () { + if [ ! -d ${TCM_CFS_DIR} ]; then + exit 1 + fi + + echo "[---------------------------] TCM/ConfigFS Status [----------------------------]" + tcm_node --listhbas + + echo "" + echo "[---------------------------] LIO-Target Status [----------------------------]" + lio_status + + echo "" + tcm_version + lio_version + rc_status -v +} + +restart () { + stop + start + RETVAL=$? +} + +case "$1" in + start) + if tcm_check ; then + start + fi + ;; + stop) + if tcm_check ; then + stop + fi + ;; + status) + tcm_status + RETVAL=$? + ;; + restart|reload) + restart + ;; + *) + echo $"Usage: $0 {start|startbak|stop|status|restart}" + exit 1 +esac + +rc_exit -- 1.8.1.4 ++++++ 0004-lio_node-Unload-iscsi_target_mod-correctly.patch -> 0113-lio_node-Unload-iscsi_target_mod-correctly.patch ++++++ --- /work/SRC/openSUSE:Factory/lio-utils/0004-lio_node-Unload-iscsi_target_mod-correctly.patch 2014-01-02 11:15:02.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.lio-utils.new/0113-lio_node-Unload-iscsi_target_mod-correctly.patch 2014-05-02 13:59:47.000000000 +0200 @@ -1,4 +1,4 @@ -From 343a1eaa66671c12486d7a89ce96916905c1b36f Mon Sep 17 00:00:00 2001 +From 95042b812a10997cdc3e56ffe8c402168c3f19d5 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Tue, 9 Oct 2012 13:52:19 -0700 Subject: lio_node: Unload iscsi_target_mod correctly @@ -11,12 +11,13 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- - lio-py/lio_node.py | 17 +++++++++-------- - scripts/rc.target | 2 +- - 2 files changed, 10 insertions(+), 9 deletions(-) + lio-py/lio_node.py | 17 +++++++++-------- + scripts/rc.target | 2 +- + scripts/rc.target.suse | 5 +++-- + 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lio-py/lio_node.py b/lio-py/lio_node.py -index c08850d..a9412d1 100755 +index d1e562e..c7082e8 100755 --- a/lio-py/lio_node.py +++ b/lio-py/lio_node.py @@ -1198,10 +1198,9 @@ def lio_target_set_tpg_param(option, opt_str, value, parser): @@ -51,10 +52,10 @@ rmmod_op = "rmmod iscsi_target_mod" ret = os.system(rmmod_op) diff --git a/scripts/rc.target b/scripts/rc.target -index b464f32..f18de59 100644 +index 7ad75a3..d5243e2 100644 --- a/scripts/rc.target +++ b/scripts/rc.target -@@ -270,7 +270,7 @@ function shutdown_fabrics() { +@@ -282,7 +282,7 @@ function shutdown_fabrics() { } function shutdown_lio_mod () { @@ -63,6 +64,32 @@ return 0 fi +diff --git a/scripts/rc.target.suse b/scripts/rc.target.suse +index 5e49f8f..a3806fa 100644 +--- a/scripts/rc.target.suse ++++ b/scripts/rc.target.suse +@@ -214,7 +214,7 @@ function shutdown_fabrics() { + } + + function shutdown_lio_mod () { +- if [ -d /sys/kernel/config/target/iscsi/ ]; then ++ if -ne lsmod | grep -q iscsi_target_mod ; then + echo -n $"Unloading LIO-Target/ConfigFS fabric: " + ${LIO_NODE} --unload + rc_status -v +@@ -229,10 +229,11 @@ function unload_tcm_mod() { + + echo -n $"Unloading target_core_mod/ConfigFS core: " + $TCM_NODE --unload +- sleep 1 + RETVAL=$? + if [ $RETVAL != 0 ] ; then + rc_failed 1 ++ else ++ sleep 1 + fi + rc_status -v + fi -- -1.7.10.4 +1.8.1.4 ++++++ 0005-tcm_node-Unload-tcm-modules-recursively.patch -> 0114-tcm_node-Unload-tcm-modules-recursively.patch ++++++ --- /work/SRC/openSUSE:Factory/lio-utils/0005-tcm_node-Unload-tcm-modules-recursively.patch 2014-01-02 11:15:02.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.lio-utils.new/0114-tcm_node-Unload-tcm-modules-recursively.patch 2014-05-02 13:59:47.000000000 +0200 @@ -1,6 +1,6 @@ -From 355ec313c9fbccea4b1191d25d96b0f97371e127 Mon Sep 17 00:00:00 2001 +From 043ab42daefb274029cb4cc3e96805a2b6dc29db Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> -Date: Fri, 26 Oct 2012 12:04:07 +0200 +Date: Tue, 9 Oct 2012 13:57:03 -0700 Subject: tcm_node: Unload tcm modules recursively There might be different modules loaded and we might not know @@ -12,16 +12,16 @@ Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- - tcm-py/tcm_node.py | 36 +++++++++++++++++------------------- - 1 file changed, 17 insertions(+), 19 deletions(-) + tcm-py/tcm_node.py | 26 +++++++++++++++++--------- + 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/tcm-py/tcm_node.py b/tcm-py/tcm_node.py -index a8cd7b8..bab073d 100755 +index 7cd0217..86eeef4 100755 --- a/tcm-py/tcm_node.py +++ b/tcm-py/tcm_node.py -@@ -1222,6 +1222,21 @@ def tcm_show_wwn_info(option, opt_str, value, parser): - - return +@@ -578,6 +578,21 @@ def tcm_show_wwn_info(dev_path): + if info: + print info +def tcm_unload_modules(mod): + p = sub.Popen(["lsmod"], stdout=sub.PIPE) @@ -38,37 +38,27 @@ + tcm_err("Unable to " + rmmod_op) + return + - def tcm_unload(option, opt_str, value, parser): - + def tcm_unload(): if not os.path.isdir(tcm_root): -@@ -1241,25 +1256,8 @@ def tcm_unload(option, opt_str, value, parser): + tcm_err("Unable to access tcm_root: " + tcm_root) +@@ -596,15 +611,8 @@ def tcm_unload(): - tcm_del_alua_lugp(None, None, lu_gp, None) + tcm_del_alua_lugp(lu_gp) - # Unload TCM subsystem plugin modules -- rmmod_op = "rmmod target_core_iblock" -- ret = os.system(rmmod_op) -- -- rmmod_op = "rmmod target_core_file" -- ret = os.system(rmmod_op) -- -- rmmod_op = "rmmod target_core_pscsi" -- ret = os.system(rmmod_op) -- -- rmmod_op = "rmmod target_core_stgt" -- ret = os.system(rmmod_op) +- for module in ("iblock", "file", "pscsi"): +- os.system("rmmod target_core_%s" % module) - - # Unload TCM Core - rmmod_op = "rmmod target_core_mod" - ret = os.system(rmmod_op) - if ret: - tcm_err("Unable to rmmod target_core_mod") -- + # Unload TCM subsystem plugin modules + TCM core + tcm_unload_modules("target_core_mod") - return - def tcm_version(option, opt_str, value, parser): + def tcm_version(): + return tcm_read("/sys/kernel/config/target/version").strip() -- -1.7.10.4 +1.8.1.4 ++++++ 0006-lio-utils-Use-the-proper-conditional-inversion-in-sh.patch -> 0115-lio-utils-Use-the-proper-conditional-inversion-in-sh.patch ++++++ --- /work/SRC/openSUSE:Factory/lio-utils/0006-lio-utils-Use-the-proper-conditional-inversion-in-sh.patch 2014-01-02 11:15:02.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.lio-utils.new/0115-lio-utils-Use-the-proper-conditional-inversion-in-sh.patch 2014-05-02 13:59:47.000000000 +0200 @@ -1,4 +1,4 @@ -From 4cb4b1e5e7289cd845c04a91e9be8fa36e26a342 Mon Sep 17 00:00:00 2001 +From ff5e42eff24acdac5b2123afb83c63a88377cc51 Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Tue, 9 Oct 2012 14:51:33 -0700 Subject: lio-utils: Use the proper conditional inversion in shutdown_lio_mod @@ -8,14 +8,15 @@ Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- - scripts/rc.target | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + scripts/rc.target | 2 +- + scripts/rc.target.suse | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/rc.target b/scripts/rc.target -index f18de59..83e9dac 100644 +index d5243e2..b269ef3 100644 --- a/scripts/rc.target +++ b/scripts/rc.target -@@ -270,7 +270,7 @@ function shutdown_fabrics() { +@@ -282,7 +282,7 @@ function shutdown_fabrics() { } function shutdown_lio_mod () { @@ -24,6 +25,19 @@ return 0 fi +diff --git a/scripts/rc.target.suse b/scripts/rc.target.suse +index a3806fa..5aa5283 100644 +--- a/scripts/rc.target.suse ++++ b/scripts/rc.target.suse +@@ -214,7 +214,7 @@ function shutdown_fabrics() { + } + + function shutdown_lio_mod () { +- if -ne lsmod | grep -q iscsi_target_mod ; then ++ if ! lsmod | grep -q iscsi_target_mod ; then + echo -n $"Unloading LIO-Target/ConfigFS fabric: " + ${LIO_NODE} --unload + rc_status -v -- -1.7.10.4 +1.8.1.4 ++++++ 0116-lio-utils-Change-rc.target.suse-shutdown_lio_mod-to-.patch ++++++
From f4b1ebbb0fb9d845bdb24d8b4057e6dfebaa3039 Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Tue, 9 Oct 2012 15:14:45 -0700 Subject: lio-utils: Change rc.target.suse:shutdown_lio_mod to follow rc.target
Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- scripts/rc.target.suse | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/rc.target.suse b/scripts/rc.target.suse index 5aa5283..c812430 100644 --- a/scripts/rc.target.suse +++ b/scripts/rc.target.suse @@ -215,10 +215,12 @@ function shutdown_fabrics() { function shutdown_lio_mod () { if ! lsmod | grep -q iscsi_target_mod ; then - echo -n $"Unloading LIO-Target/ConfigFS fabric: " - ${LIO_NODE} --unload - rc_status -v - fi + return 0 + fi + + echo -n $"Unloading LIO-Target/ConfigFS fabric: " + ${LIO_NODE} --unload + rc_status -v } function unload_tcm_mod() { -- 1.8.1.4 ++++++ 0117-tcm_node-Fix-typo-in-tcm_create_pscsibyudev.patch ++++++
From 5ed01e4481e7bcaeafcb4e9c52d4242f2331cb6f Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Thu, 17 Jan 2013 13:37:48 -0800 Subject: tcm_node: Fix typo in tcm_create_pscsibyudev
This typo fixes a regression bug that was preventing tcm_node --pscsibydev from working as expected. Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- tcm-py/tcm_node.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tcm-py/tcm_node.py b/tcm-py/tcm_node.py index 86eeef4..3195d66 100755 --- a/tcm-py/tcm_node.py +++ b/tcm-py/tcm_node.py @@ -298,7 +298,7 @@ def tcm_create_pscsi(dev_path, ctl): tcm_createvirtdev(dev_path, pscsi_params_str) def tcm_create_pscsibyudev(dev_path, udev_path): - tcm_createvirtdev(cfs_dev, udev_path) + tcm_createvirtdev(dev_dev, udev_path) def tcm_create_iblock(dev_path, udev_path): tcm_createvirtdev(dev_path, udev_path) -- 1.8.1.4 ++++++ 0011-tcm-file-Set-fd_buffered_io-1-based-upon-active-FILE.patch -> 0118-tcm-file-Set-fd_buffered_io-1-based-upon-active-FILE.patch ++++++ --- /work/SRC/openSUSE:Factory/lio-utils/0011-tcm-file-Set-fd_buffered_io-1-based-upon-active-FILE.patch 2014-01-02 11:15:02.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.lio-utils.new/0118-tcm-file-Set-fd_buffered_io-1-based-upon-active-FILE.patch 2014-05-02 13:59:47.000000000 +0200 @@ -1,4 +1,4 @@ -From 45632302ad613e1622a2d89f1b477d95126d6839 Mon Sep 17 00:00:00 2001 +From 5d0f4829aa130619e81edad3fe0aaa697fa00be4 Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Thu, 31 Jan 2013 11:54:05 -0800 Subject: tcm-file: Set fd_buffered_io=1 based upon active FILEIO mode @@ -9,16 +9,16 @@ Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- - tcm-py/tcm_fileio.py | 30 ++++++++++++++++++++++++++---- + tcm-py/tcm_fileio.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/tcm-py/tcm_fileio.py b/tcm-py/tcm_fileio.py -index d390385..e08d028 100755 +index c130bc6..7429844 100755 --- a/tcm-py/tcm_fileio.py +++ b/tcm-py/tcm_fileio.py -@@ -52,15 +52,29 @@ def fd_createvirtdev(path, params): +@@ -50,15 +50,29 @@ def createvirtdev(path, params): def fd_freevirtdev(): - return + pass +def fd_get_buffered_mode(value): + @@ -49,7 +49,7 @@ os.close(p) -@@ -73,6 +87,11 @@ def fd_get_params(path): +@@ -71,6 +85,11 @@ def fd_get_params(path): return p.close() @@ -61,7 +61,7 @@ off = value.index('File: ') off += 6 fd_dev_name_tmp = value[off:] -@@ -81,7 +100,10 @@ def fd_get_params(path): +@@ -79,7 +98,10 @@ def fd_get_params(path): off += 7 fd_dev_size_tmp = value[off:] fd_dev_size = fd_dev_size_tmp.split(' ') @@ -74,5 +74,5 @@ # fd_dev_name= and fd_dev_size= parameters for tcm_node --createdev return params -- -1.7.10.4 +1.8.1.4 ++++++ 0119-tcm_node-Fix-typo-in-tcm_create_pscsibyudev-again.patch ++++++
From 28bd928655bdc7bd3cf380f0196630690c51e05f Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Thu, 28 Feb 2013 13:24:44 -0800 Subject: tcm_node: Fix typo in tcm_create_pscsibyudev (again)
Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- tcm-py/tcm_node.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tcm-py/tcm_node.py b/tcm-py/tcm_node.py index 3195d66..e6913fd 100755 --- a/tcm-py/tcm_node.py +++ b/tcm-py/tcm_node.py @@ -298,7 +298,7 @@ def tcm_create_pscsi(dev_path, ctl): tcm_createvirtdev(dev_path, pscsi_params_str) def tcm_create_pscsibyudev(dev_path, udev_path): - tcm_createvirtdev(dev_dev, udev_path) + tcm_createvirtdev(dev_path, udev_path) def tcm_create_iblock(dev_path, udev_path): tcm_createvirtdev(dev_path, udev_path) -- 1.8.1.4 ++++++ 0120-lio-node-Add-iser-network-portal-attribute-ib_isert-.patch ++++++
From 3143009d99e854f23cff437df1812cc39c14a42b Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Thu, 11 Apr 2013 20:32:40 -0700 Subject: lio-node: Add iser network portal attribute + ib_isert shutdown support
Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- lio-py/lio_node.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/lio-py/lio_node.py b/lio-py/lio_node.py index c7082e8..02e661b 100755 --- a/lio-py/lio_node.py +++ b/lio-py/lio_node.py @@ -277,7 +277,20 @@ def lio_target_del_np(option, opt_str, value, parser): tpgt = str(value[1]); np = str(value[2]); - rmdir_op = "rmdir " + lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np/" + np + path = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np/" + np + + path_iser = path + "/iser" + if os.path.isfile(path_iser): + fd = open(path_iser, 'r') + s = fd.read() + set_iser_attr = s.strip() + fd.close() + if set_iser_attr == "1": + fd = open(path_iser, 'w') + fd.write("0") + fd.close() + + rmdir_op = "rmdir " + path # print "rmdir_op: " + rmdir_op ret = os.system(rmdir_op) if not ret: @@ -1230,6 +1243,15 @@ def lio_target_unload(option, opt_str, value, parser): if ret: print "Unable to remove lio_root: " + lio_root + fd = open("/proc/modules", 'r') + buf = fd.read() + fd.close() + if re.search('ib_isert', buf): + rmmod_op = "rmmod ib_isert" + ret = os.system(rmmod_op) + if ret: + print "Unable to unload ib_isert" + rmmod_op = "rmmod iscsi_target_mod" ret = os.system(rmmod_op) if ret: -- 1.8.1.4 ++++++ 0121-lio-dump-Add-iser-network-portal-attribute-support.patch ++++++
From a8de60664dd259d1e613be719c02cfdab44bf00c Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger <nab@risingtidesystems.com> Date: Thu, 11 Apr 2013 20:33:40 -0700 Subject: lio-dump: Add iser network portal attribute support
Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> --- lio-py/lio_dump.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lio-py/lio_dump.py b/lio-py/lio_dump.py index 6328161..3e3461f 100755 --- a/lio-py/lio_dump.py +++ b/lio-py/lio_dump.py @@ -57,7 +57,15 @@ def lio_target_configfs_dump(option, opt_str, value, parser): print "#### Network portals for iSCSI Target Portal Group" np_root = os.listdir(lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np") for np in np_root: - print "mkdir -p " + lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np/" + np + np_path = lio_root + "/" + iqn + "/tpgt_" + tpgt + "/np/" + np + print "mkdir -p " + np_path + np_path_iser = np_path + "/iser" + if os.path.isfile(np_path_iser): + iser_fd = open(np_path_iser, 'r') + iser_attr = iser_fd.read() + iser_attr = iser_attr.strip() + if iser_attr == "1": + print "echo 1 > " + np_path_iser print "#### iSCSI Target Ports" lun_root = os.listdir(lio_root + "/" + iqn + "/tpgt_" + tpgt + "/lun") -- 1.8.1.4 ++++++ 0122-Create-COPYING.patch ++++++
From 2537c8e3b9898dadcbade26e6f8537451180928f Mon Sep 17 00:00:00 2001 From: marcfl <mwf@daterainc.com> Date: Sat, 16 Nov 2013 10:16:37 -0800 Subject: Create COPYING
--- COPYING | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 COPYING diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..f353719 --- /dev/null +++ b/COPYING @@ -0,0 +1,50 @@ +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + You must give any other recipients of the Work or Derivative Works a copy of this License; and + You must cause any modified files to carry prominent notices stating that You changed the files; and + You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -- 1.8.1.4 ++++++ 0123-Update-COPYING.patch ++++++
From c13f8ff807dfbebc8265850b83fb3e69459b588e Mon Sep 17 00:00:00 2001 From: marcfl <mwf@daterainc.com> Date: Sat, 16 Nov 2013 10:18:07 -0800 Subject: Update COPYING
--- COPYING | 223 ++++++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 174 insertions(+), 49 deletions(-) diff --git a/COPYING b/COPYING index f353719..67db858 100644 --- a/COPYING +++ b/COPYING @@ -1,50 +1,175 @@ -Apache License -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - You must give any other recipients of the Work or Derivative Works a copy of this License; and - You must cause any modified files to carry prominent notices stating that You changed the files; and - You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -- 1.8.1.4 ++++++ 0124-Create-README.patch ++++++
From 7c445a30a060b06cfc3bdabc6adb4910a27aeb5d Mon Sep 17 00:00:00 2001 From: marcfl <mwf@daterainc.com> Date: Sat, 16 Nov 2013 11:48:20 -0800 Subject: Create README
--- README | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 README diff --git a/README b/README new file mode 100644 index 0000000..d0f216c --- /dev/null +++ b/README @@ -0,0 +1,10 @@ +lio-utils provide a simple low-level configuration tool set for the LIO Linux SCSI Target. + +lio-utils use the configFS kernel API that is available with LIO, and provides a clean +interface for controlling the Linux kernel LIO components. + +For more information, please see: + +http://linux-iscsi.org/wiki/lio-utils + +Note: lio-utils are deprecated and have been superseded by targetcli. -- 1.8.1.4 ++++++ 0125-Update-README.patch ++++++
From 6c2e184d1a70459d26f748d95545267c7e436584 Mon Sep 17 00:00:00 2001 From: marcfl <mwf@daterainc.com> Date: Sat, 16 Nov 2013 11:51:16 -0800 Subject: Update README
--- README | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README b/README index d0f216c..13312c8 100644 --- a/README +++ b/README @@ -1,7 +1,8 @@ -lio-utils provide a simple low-level configuration tool set for the LIO Linux SCSI Target. +lio-utils is a Python library that provides a simple low-level configuration +tool set for the LIO Linux SCSI Target. lio-utils use the configFS kernel API +that is available with LIO. -lio-utils use the configFS kernel API that is available with LIO, and provides a clean -interface for controlling the Linux kernel LIO components. +lio-utils was developed by Datera, Inc. (www.daterainc.com). For more information, please see: -- 1.8.1.4 ++++++ 0126-Update-README.patch ++++++
From 65f15e957588a261305d1c1d0d6a1cdf397cb3ce Mon Sep 17 00:00:00 2001 From: marcfl <mwf@daterainc.com> Date: Fri, 7 Feb 2014 19:50:21 -0800 Subject: Update README
--- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 13312c8..8fdd0e7 100644 --- a/README +++ b/README @@ -2,7 +2,7 @@ lio-utils is a Python library that provides a simple low-level configuration tool set for the LIO Linux SCSI Target. lio-utils use the configFS kernel API that is available with LIO. -lio-utils was developed by Datera, Inc. (www.daterainc.com). +lio-utils was developed by Datera, Inc. (www.datera.io). For more information, please see: -- 1.8.1.4 ++++++ lio-utils-4.0.tar.bz2 -> lio-utils-4.1.tar.bz2 ++++++ ++++ 3033 lines of diff (skipped) -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org