[oe] [meta-networking][PATCH] iscsitarget: add new recipe

Jagadeesh Krishnanjanappa jkrishnanjanappa at mvista.com
Wed Aug 26 17:44:29 UTC 2015


iSCSI Enterprise Target is aimed to develop an
open source iSCSI target with professional features,
that works well in enterprise environment under real
workload, and is scalable and versatile enough to meet the
challenge of future storage needs and developments.

Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa at mvista.com>
---
 ...rors-observed-with-linux-3.19-and-greater.patch | 198 +++++++++++++++++++++
 ...use-kernel-makefile-to-get-kernel-version.patch |  67 +++++++
 .../iscsitarget/iscsitarget_1.4.20.3+svn502.bb     |  62 +++++++
 3 files changed, 327 insertions(+)
 create mode 100644 meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch
 create mode 100644 meta-networking/recipes-extended/iscsitarget/files/use-kernel-makefile-to-get-kernel-version.patch
 create mode 100644 meta-networking/recipes-extended/iscsitarget/iscsitarget_1.4.20.3+svn502.bb

diff --git a/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch b/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch
new file mode 100644
index 0000000..6878ca2
--- /dev/null
+++ b/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch
@@ -0,0 +1,198 @@
+Fix build errors with linux kernel v3.19 and above
+
+Below errors came up while building iscsitarget for 
+qemux86-64 (and others) because,
+1. 'struct user_msghdr' is being used for userland-side msghdr instead
+of 'struct msghdr', which is used for kernel-side msghdr in linux v3.19
+and above.
+
+error snippet:
+-- snip --
+| /CGE7_SHDD/project_yocto_1.8/poky/build/tmp/work/qemux86_64-poky-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/iscsi.c: In function 'cmnd_skip_pdu':
+| /CGE7_SHDD/project_yocto_1.8/poky/build/tmp/work/qemux86_64-poky-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/iscsi.c:492:16: error: 'struct msghdr' has no member named 'msg_iov'
+|   conn->read_msg.msg_iov = conn->read_iov;
+-- CUT --
+
+Reference:
+https://github.com/torvalds/linux/commit/666547ff591cebdedc4679bf6b1b3f3383a8dea3
+
+2. 'SERVICE_ACTION_IN' has been renamed to SERVICE_ACTION_IN_16 in linux v3.19
+and above.
+
+error snippet:
+-- snip --
+| /CGE7_SHDD/project_yocto_1.8/poky/build/tmp/work/qemux86_64-poky-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/iscsi.c: In function 'scsi_cmnd_start':
+| /CGE7_SHDD/project_yocto_1.8/poky/build/tmp/work/qemux86_64-poky-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/iscsi.c:989:7: error: 'SERVICE_ACTION_IN' undeclared (first use in this function)
+|   case SERVICE_ACTION_IN:
+-- CUT --
+
+Reference:
+https://github.com/torvalds/linux/commit/eb846d9f147455e4e5e1863bfb5e31974bb69b7c
+
+3. In linux v3.19 and above, f_dentry member has been removed from 
+'struct file' structure.
+
+error snippet:
+-- snip --
+| /CGE7_SHDD/project_yocto_1.8/poky/build/tmp/work/qemux86_64-poky-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/conn.c: In function 'iet_socket_bind':
+| /CGE7_SHDD/project_yocto_1.8/poky/build/tmp/work/qemux86_64-poky-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/conn.c:130:34: error: 'struct file' has no member named 'f_dentry'
+|   conn->sock = SOCKET_I(conn->file->f_dentry->d_inode);
+-- CUT --
+
+new helper function file_inode(file) should be used instead.
+
+References:
+1. https://github.com/torvalds/linux/commit/78d28e651f97866d608d9b41f8ad291e65d47dd5
+2. https://github.com/torvalds/linux/commit/496ad9aa8ef448058e36ca7a787c61f2e63f0f54
+
+Upstream-Status: Pending
+
+Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa at mvista.com>
+
+--- iscsitarget-1.4.20.3+svn502_org/kernel/conn.c	2015-08-24 16:13:26.481924679 +0530
++++ iscsitarget-1.4.20.3+svn502/kernel/conn.c	2015-08-24 17:27:06.897653698 +0530
+@@ -127,7 +127,11 @@ static void iet_socket_bind(struct iscsi
+ 
+ 	dprintk(D_GENERIC, "%llu\n", (unsigned long long) session->sid);
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++	conn->sock = SOCKET_I(file_inode(conn->file));
++#else
+ 	conn->sock = SOCKET_I(conn->file->f_dentry->d_inode);
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ 	conn->sock->sk->sk_user_data = conn;
+ 
+ 	write_lock_bh(&conn->sock->sk->sk_callback_lock);
+--- iscsitarget-1.4.20.3+svn502_org/kernel/file-io.c	2015-08-24 16:13:26.481924679 +0530
++++ iscsitarget-1.4.20.3+svn502/kernel/file-io.c	2015-08-24 17:30:54.390131100 +0530
+@@ -69,7 +69,11 @@ static int fileio_make_request(struct ie
+ static int fileio_sync(struct iet_volume *lu, struct tio *tio)
+ {
+ 	struct fileio_data *p = lu->private;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++	struct inode *inode = file_inode(p->filp);
++#else
+ 	struct inode *inode = p->filp->f_dentry->d_inode;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ 	struct address_space *mapping = inode->i_mapping;
+ 	loff_t ppos, count;
+ 	int res;
+@@ -213,7 +217,11 @@ static int fileio_attach(struct iet_volu
+ 		eprintk("%d\n", err);
+ 		goto out;
+ 	}
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++	inode = file_inode(p->filp);
++#else
+ 	inode = p->filp->f_dentry->d_inode;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ 
+ 	if (S_ISREG(inode->i_mode))
+ 		;
+--- iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.c	2015-08-24 16:13:26.481924679 +0530
++++ iscsitarget-1.4.20.3+svn502/kernel/iscsi.c	2015-08-24 17:33:50.950490156 +0530
+@@ -986,7 +986,11 @@ static void scsi_cmnd_start(struct iscsi
+ 		set_cmnd_lunit(req);
+ 
+ 	switch (req_hdr->scb[0]) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++	case SERVICE_ACTION_IN_16:
++#else
+ 	case SERVICE_ACTION_IN:
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ 		if ((req_hdr->scb[1] & 0x1f) != 0x10)
+ 			goto error;
+ 	case INQUIRY:
+--- iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.h	2015-08-24 16:13:26.481924679 +0530
++++ iscsitarget-1.4.20.3+svn502/kernel/iscsi.h	2015-08-24 17:35:31.354690051 +0530
+@@ -257,7 +257,11 @@ struct iscsi_conn {
+ 	struct timer_list nop_timer;
+ 
+ 	struct iscsi_cmnd *read_cmnd;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++	struct user_msghdr read_msg;
++#else
+ 	struct msghdr read_msg;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ 	struct iovec read_iov[ISCSI_CONN_IOV_MAX];
+ 	u32 read_size;
+ 	u32 read_overflow;
+--- iscsitarget-1.4.20.3+svn502_org/kernel/nthread.c	2015-08-24 16:13:26.481924679 +0530
++++ iscsitarget-1.4.20.3+svn502/kernel/nthread.c	2015-08-24 17:41:56.187428925 +0530
+@@ -80,8 +80,11 @@ static int is_data_available(struct iscs
+ 	set_fs(oldfs);
+ 	return (res >= 0) ? avail : res;
+ }
+-
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++static void forward_iov(struct user_msghdr *msg, int len)
++#else
+ static void forward_iov(struct msghdr *msg, int len)
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ {
+ 	while (msg->msg_iov->iov_len <= len) {
+ 		len -= msg->msg_iov->iov_len;
+@@ -96,7 +99,11 @@ static void forward_iov(struct msghdr *m
+ static int do_recv(struct iscsi_conn *conn, int state)
+ {
+ 	mm_segment_t oldfs;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++	struct user_msghdr msg;
++#else
+ 	struct msghdr msg;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ 	struct iovec iov[ISCSI_CONN_IOV_MAX];
+ 	int i, len, res;
+ 
+@@ -461,7 +468,11 @@ static void exit_tx(struct iscsi_conn *c
+ static int tx_ddigest(struct iscsi_cmnd *cmnd, int state)
+ {
+ 	int res, rest = cmnd->conn->write_size;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++	struct user_msghdr msg = {.msg_flags = MSG_NOSIGNAL | MSG_DONTWAIT};
++#else
+ 	struct msghdr msg = {.msg_flags = MSG_NOSIGNAL | MSG_DONTWAIT};
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ 	struct kvec iov;
+ 
+ 	iov.iov_base = (char *) (&cmnd->ddigest) + (sizeof(u32) - rest);
+--- iscsitarget-1.4.20.3+svn502_org/kernel/target_disk.c	2015-08-24 16:13:26.481924679 +0530
++++ iscsitarget-1.4.20.3+svn502/kernel/target_disk.c	2015-08-24 17:43:42.167625159 +0530
+@@ -606,7 +606,11 @@ static int disk_execute_cmnd(struct iscs
+ 	case REQUEST_SENSE:
+ 		send_data_rsp(cmnd, build_request_sense_response);
+ 		break;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++	case SERVICE_ACTION_IN_16:
++#else
+ 	case SERVICE_ACTION_IN:
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */	
+ 		send_data_rsp(cmnd, build_service_action_in_response);
+ 		break;
+ 	case READ_6:
+--- iscsitarget-1.4.20.3+svn502_org/kernel/volume.c	2015-08-24 16:13:26.477924674 +0530
++++ iscsitarget-1.4.20.3+svn502/kernel/volume.c	2015-08-24 18:28:15.697074780 +0530
+@@ -398,7 +398,11 @@ int is_volume_reserved(struct iet_volume
+ 		case READ_CAPACITY:
+ 			/* allowed commands when reserved */
+ 			break;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)			
++		case SERVICE_ACTION_IN_16:
++#else
+ 		case SERVICE_ACTION_IN:
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ 			if ((scb[1] & 0x1F) == 0x10)
+ 				break;
+ 			/* fall through */
+@@ -465,7 +469,11 @@ int is_volume_reserved(struct iet_volume
+ 		if (excl_access_ro && !registered)
+ 			err = -EBUSY;
+ 		break;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++	case SERVICE_ACTION_IN_16:
++#else
+ 	case SERVICE_ACTION_IN:
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ 		if ((scb[1] & 0x1F) == 0x10)
+ 			break;
+ 		/* fall through */
diff --git a/meta-networking/recipes-extended/iscsitarget/files/use-kernel-makefile-to-get-kernel-version.patch b/meta-networking/recipes-extended/iscsitarget/files/use-kernel-makefile-to-get-kernel-version.patch
new file mode 100644
index 0000000..95bd047
--- /dev/null
+++ b/meta-networking/recipes-extended/iscsitarget/files/use-kernel-makefile-to-get-kernel-version.patch
@@ -0,0 +1,67 @@
+Get linux kernel version from Makefile of kernel source
+
+We get below messages while building iscsitarget,
+
+-- snip --
+x86_64-poky-linux-gcc: error:
+/CGE7_SHDD/project_yocto_1.8/poky/build/tmp/work-shared/qemux86-64/kernel-source/include/linux/version.h:
+No such file or directory
+x86_64-poky-linux-gcc: fatal error: no input files
+compilation terminated.
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+-- CUT --
+
+These messages are due to absence of include/linux/version.h file in 
+kernel source directory and failed to compute linux kernel version.
+So, use kernel source Makefile ( i.e $(KSRC)/Makefile) to find out 
+actual kernel version.
+
+Upstream-Status: Pending
+
+Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa at mvista.com>
+
+--- iscsitarget-1.4.20.3+svn499_org/Makefile	2014-01-27 00:00:45.000000000 +0530
++++ iscsitarget-1.4.20.3+svn499/Makefile	2015-07-23 10:44:47.013600285 +0530
+@@ -18,27 +18,11 @@ ifeq ($(KSRC),)
+ endif
+ 
+ 
+-ifneq ($(wildcard $(KSRC)/include/generated/utsrelease.h),)
+-	VERSION_FILE := $(KSRC)/include/generated/utsrelease.h
+-else
+-  ifneq ($(wildcard $(KSRC)/include/linux/utsrelease.h),)
+-	  VERSION_FILE := $(KSRC)/include/linux/utsrelease.h
+-  else
+-	  VERSION_FILE := $(KSRC)/include/linux/version.h
+-  endif
+-endif
+-
+-KVER := $(shell $(CC) $(CFLAGS) $(LDFLAGS) -E -dM $(VERSION_FILE) | \
+-	grep UTS_RELEASE | awk '{ print $$3 }' | sed 's/\"//g')
+-
+ KMOD := /lib/modules/$(KVER)/extra
+-
+-KMAJ := $(shell echo $(KVER) | \
+-	sed -e 's/^\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*.*/\1/')
+-KMIN := $(shell echo $(KVER) | \
+-	sed -e 's/^[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*.*/\1/')
+-KREV := $(shell echo $(KVER) | \
+-	sed -e 's/^[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/')
++KMAJ := $(shell cat $(KSRC)/Makefile | grep ^VERSION | gawk -F " " '{ print $$NF }')
++KMIN := $(shell cat $(KSRC)/Makefile | grep ^PATCHLEVEL | gawk -F " " '{ print $$NF }')
++KREV := $(shell cat $(KSRC)/Makefile | grep ^SUBLEVEL | gawk -F " " '{ print $$NF }')
++KVER := ${KMAJ}.${KMIN}.${KREV}
+ 
+ kver_eq = $(shell [ $(KMAJ) -eq $(1) -a $(KMIN) -eq $(2) -a $(KREV) -eq $(3) ] && \
+ 	echo 1 || echo 0)
diff --git a/meta-networking/recipes-extended/iscsitarget/iscsitarget_1.4.20.3+svn502.bb b/meta-networking/recipes-extended/iscsitarget/iscsitarget_1.4.20.3+svn502.bb
new file mode 100644
index 0000000..c96810b
--- /dev/null
+++ b/meta-networking/recipes-extended/iscsitarget/iscsitarget_1.4.20.3+svn502.bb
@@ -0,0 +1,62 @@
+DESCRIPTION = "iSCSI Enterprise Target is aimed to develop an \
+               open source iSCSI target with professional features, \
+               that works well in enterprise environment under real \
+               workload, and is scalable and versatile enough to meet the \
+               challenge of future storage needs and developments."
+HOMEPAGE = "http://iscsitarget.sourceforge.net/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6e233eda45c807aa29aeaa6d94bc48a2"
+DEPENDS = "openssl virtual/kernel"
+
+SRC_URI = "http://ftp.heanet.ie/mirrors/ubuntu/pool/universe/i/${BPN}/${BPN}_${PV}.orig.tar.gz \
+           file://use-kernel-makefile-to-get-kernel-version.patch \
+           file://fix-errors-observed-with-linux-3.19-and-greater.patch \
+	  "
+SRC_URI[md5sum] = "ef9bc823bbabd3c772208c00d5f2d089"
+SRC_URI[sha256sum] = "d3196ccb78a43266dce28587bfe30d8ab4db7566d7bce96057dfbb84100babb5"
+
+inherit module-base
+
+# Add make_scripts task to create kernel scripts
+addtask make_scripts after do_patch before do_compile
+
+do_configure[noexec] = "1"
+
+# make_scripts requires kernel source directory to create
+# kernel scripts
+do_make_scripts[depends] += "virtual/kernel:do_shared_workdir"
+
+# Make sure we don't have race condition against "make scripts"
+do_make_scripts[lockfiles] = "${TMPDIR}/kernel-scripts.lock"
+
+do_compile() {
+    oe_runmake KSRC=${STAGING_KERNEL_DIR} CFLAGS='${CFLAGS}' LDFLAGS='' \
+    CC="${CC}" V=1
+}
+
+do_install() {
+    # Module
+    install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/iscsi
+    install -m 0644 kernel/iscsi_trgt.ko \
+    ${D}/lib/modules/${KERNEL_VERSION}/kernel/iscsi/iscsi_trgt.ko
+    
+    # Userspace utilities
+    install -d ${D}${sbindir}
+    install -m 0755 usr/ietd ${D}${sbindir}/ietd
+    install -m 0755 usr/ietadm ${D}${sbindir}/ietadm
+    
+    # Config files, init scripts
+    mkdir -p ${D}${sysconfdir}/iet
+    install -m 0644 etc/ietd.conf ${D}/${sysconfdir}/iet/ietd.conf
+    install -m 0644 etc/initiators.allow ${D}${sysconfdir}/iet/initiators.allow
+    install -m 0644 etc/targets.allow ${D}${sysconfdir}/iet/targets.allow
+    mkdir -p ${D}${sysconfdir}/init.d
+    install -m 0755 etc/initd/initd ${D}${sysconfdir}/init.d/iscsi-target
+    install -m 0644 etc/initiators.deny ${D}${sysconfdir}/iet/initiators.deny
+}
+
+FILES_${PN} += "${sbindir} \
+                /lib \
+                ${sysconfdir}"
+
+RRECOMMENDS_${PN} = "kernel-module-crc32c kernel-module-libcrc32c"
-- 
1.8.2.3




More information about the Openembedded-devel mailing list