aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/iscsi-target
diff options
context:
space:
mode:
authorTom Rini <tom_rini@mentor.com>2011-01-17 08:20:02 -0700
committerTom Rini <tom_rini@mentor.com>2011-01-17 08:22:45 -0700
commit511c190b1f15a32856c0cc5528060fe9f946ef15 (patch)
treec517ff6689c56535ceaa9a7af870d23636668dba /recipes/iscsi-target
parent474d7b392a0e68011cddf53bf255345f72c83f7f (diff)
downloadopenembedded-511c190b1f15a32856c0cc5528060fe9f946ef15.tar.gz
iscsi-target: Update for newer kernels
Bring in some patches from upstream that make this compile when using 2.6.37. Signed-off-by: Tom Rini <tom_rini@mentor.com>
Diffstat (limited to 'recipes/iscsi-target')
-rw-r--r--recipes/iscsi-target/iscsi-target-svnr373.patch47
-rw-r--r--recipes/iscsi-target/iscsi-target/2.6.37-compat.patch385
-rw-r--r--recipes/iscsi-target/iscsi-target_1.4.20.2.bb4
3 files changed, 435 insertions, 1 deletions
diff --git a/recipes/iscsi-target/iscsi-target-svnr373.patch b/recipes/iscsi-target/iscsi-target-svnr373.patch
new file mode 100644
index 0000000000..f1ec5064f2
--- /dev/null
+++ b/recipes/iscsi-target/iscsi-target-svnr373.patch
@@ -0,0 +1,47 @@
+Index: trunk/kernel/conn.c
+===================================================================
+--- trunk/kernel/conn.c (revision 372)
++++ trunk/kernel/conn.c (revision 373)
+@@ -44,7 +44,7 @@
+ switch (sk->sk_family) {
+ case AF_INET:
+ snprintf(buf, sizeof(buf),
+- "%u.%u.%u.%u", NIPQUAD(inet_sk(sk)->inet_daddr));
++ "%pI4", inet_sk(sk)->inet_daddr);
+ break;
+ case AF_INET6:
+ snprintf(buf, sizeof(buf), "[%pI6]",
+Index: trunk/patches/compat-2.6.33-2.6.35.patch
+===================================================================
+--- trunk/patches/compat-2.6.33-2.6.35.patch (revision 0)
++++ trunk/patches/compat-2.6.33-2.6.35.patch (revision 373)
+@@ -0,0 +1,13 @@
++diff --git b/kernel/conn.c a/kernel/conn.c
++index c7b8ea1..ec6dada 100644
++--- b/kernel/conn.c
+++++ a/kernel/conn.c
++@@ -44,7 +44,7 @@ void conn_info_show(struct seq_file *seq, struct iscsi_session *session)
++ switch (sk->sk_family) {
++ case AF_INET:
++ snprintf(buf, sizeof(buf),
++- "%pI4", inet_sk(sk)->inet_daddr);
+++ "%u.%u.%u.%u", NIPQUAD(inet_sk(sk)->inet_daddr));
++ break;
++ case AF_INET6:
++ snprintf(buf, sizeof(buf), "[%pI6]",
+Index: trunk/Makefile
+===================================================================
+--- trunk/Makefile (revision 372)
++++ trunk/Makefile (revision 373)
+@@ -56,6 +56,11 @@
+ # base first the earlier patch sets will not need to be modified.
+ #
+
++# Compatibility patch for kernels > 2.6.32 <= 2.6.35
++ifeq ($(call kver_le,2,6,35),1)
++ PATCHES := $(PATCHES) compat-2.6.33-2.6.35.patch
++endif
++
+ # Compatibility patch for kernels <= 2.6.32
+ ifeq ($(call kver_le,2,6,32),1)
+ PATCHES := $(PATCHES) compat-2.6.32.patch
diff --git a/recipes/iscsi-target/iscsi-target/2.6.37-compat.patch b/recipes/iscsi-target/iscsi-target/2.6.37-compat.patch
new file mode 100644
index 0000000000..39573691b9
--- /dev/null
+++ b/recipes/iscsi-target/iscsi-target/2.6.37-compat.patch
@@ -0,0 +1,385 @@
+http://old.nabble.com/Re:-Issues-compiling-kernel-module-against-current-2.6.37-git-p30440129.html
+
+---
+ Makefile | 5 ++
+ kernel/config.c | 10 ++---
+ kernel/iscsi.h | 5 --
+ kernel/target.c | 34 ++++++++++---------
+ kernel/volume.c | 1
+ kernel/wthread.c | 20 -----------
+ patches/compat-2.6.36.patch | 78 ++++++++++++++++++++++++++++++++++++++++++++
+ 7 files changed, 108 insertions(+), 45 deletions(-)
+
+Index: iscsitarget-1.4.20.2/Makefile
+===================================================================
+--- iscsitarget-1.4.20.2.orig/Makefile
++++ iscsitarget-1.4.20.2/Makefile
+@@ -55,6 +55,11 @@ kver_lk = $(shell [ `echo $(KVER) | egre
+ #
+
+ # Compatibility patch for kernels <= 2.6.32
++ifeq ($(call kver_le,2,6,36),1)
++ PATCHES := $(PATCHES) compat-2.6.36.patch
++endif
++
++# Compatibility patch for kernels > 2.6.32 <= 2.6.35
+ ifeq ($(call kver_le,2,6,32),1)
+ PATCHES := $(PATCHES) compat-2.6.32.patch
+ endif
+Index: iscsitarget-1.4.20.2/kernel/config.c
+===================================================================
+--- iscsitarget-1.4.20.2.orig/kernel/config.c
++++ iscsitarget-1.4.20.2/kernel/config.c
+@@ -9,7 +9,7 @@
+ #include "iscsi.h"
+ #include "iscsi_dbg.h"
+
+-static DECLARE_MUTEX(ioctl_sem);
++static DEFINE_MUTEX(ioctl_mutex);
+
+ struct proc_entries {
+ const char *name;
+@@ -258,7 +258,7 @@ static long ioctl(struct file *file, uns
+ long err;
+ u32 id;
+
+- err = down_interruptible(&ioctl_sem);
++ err = mutex_lock_interruptible(&ioctl_mutex);
+ if (err < 0)
+ return err;
+
+@@ -339,7 +339,7 @@ static long ioctl(struct file *file, uns
+
+ target_unlock(target);
+ done:
+- up(&ioctl_sem);
++ mutex_unlock(&ioctl_mutex);
+
+ return err;
+ }
+@@ -347,9 +347,9 @@ done:
+ static int release(struct inode *i __attribute__((unused)),
+ struct file *f __attribute__((unused)))
+ {
+- down(&ioctl_sem);
++ mutex_lock(&ioctl_mutex);
+ target_del_all();
+- up(&ioctl_sem);
++ mutex_unlock(&ioctl_mutex);
+
+ return 0;
+ }
+Index: iscsitarget-1.4.20.2/kernel/iscsi.h
+===================================================================
+--- iscsitarget-1.4.20.2.orig/kernel/iscsi.h
++++ iscsitarget-1.4.20.2/kernel/iscsi.h
+@@ -8,7 +8,6 @@
+ #ifndef __ISCSI_H__
+ #define __ISCSI_H__
+
+-#include <linux/blkdev.h>
+ #include <linux/completion.h>
+ #include <linux/pagemap.h>
+ #include <linux/seq_file.h>
+@@ -94,8 +93,6 @@ struct worker_thread_info {
+ struct list_head work_queue;
+
+ wait_queue_head_t wthread_sleep;
+-
+- struct io_context *wthread_ioc;
+ };
+
+ struct iscsi_cmnd;
+@@ -130,7 +127,7 @@ struct iscsi_target {
+ /* Points either to own list or global pool */
+ struct worker_thread_info * wthread_info;
+
+- struct semaphore target_sem;
++ struct mutex target_mutex;
+ };
+
+ struct iscsi_queue {
+Index: iscsitarget-1.4.20.2/kernel/target.c
+===================================================================
+--- iscsitarget-1.4.20.2.orig/kernel/target.c
++++ iscsitarget-1.4.20.2/kernel/target.c
+@@ -4,6 +4,8 @@
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
++#include <linux/mutex.h>
++
+ #include "iscsi.h"
+ #include "digest.h"
+ #include "iscsi_dbg.h"
+@@ -11,7 +13,7 @@
+ #define MAX_NR_TARGETS (1UL << 30)
+
+ static LIST_HEAD(target_list);
+-static DECLARE_MUTEX(target_list_sem);
++static DEFINE_MUTEX(target_list_mutex);
+ static u32 next_target_id;
+ static u32 nr_targets;
+
+@@ -48,16 +50,16 @@ inline int target_lock(struct iscsi_targ
+ int err = 0;
+
+ if (interruptible)
+- err = down_interruptible(&target->target_sem);
++ err = mutex_lock_interruptible(&target->target_mutex);
+ else
+- down(&target->target_sem);
++ mutex_lock(&target->target_mutex);
+
+ return err;
+ }
+
+ inline void target_unlock(struct iscsi_target *target)
+ {
+- up(&target->target_sem);
++ mutex_unlock(&target->target_mutex);
+ }
+
+ static struct iscsi_target *__target_lookup_by_id(u32 id)
+@@ -86,9 +88,9 @@ struct iscsi_target *target_lookup_by_id
+ {
+ struct iscsi_target *target;
+
+- down(&target_list_sem);
++ mutex_lock(&target_list_mutex);
+ target = __target_lookup_by_id(id);
+- up(&target_list_sem);
++ mutex_unlock(&target_list_mutex);
+
+ return target;
+ }
+@@ -157,7 +159,7 @@ static int iscsi_target_create(struct ta
+
+ strncpy(target->name, name, sizeof(target->name) - 1);
+
+- init_MUTEX(&target->target_sem);
++ mutex_init(&target->target_mutex);
+ spin_lock_init(&target->session_list_lock);
+
+ INIT_LIST_HEAD(&target->session_list);
+@@ -195,7 +197,7 @@ int target_add(struct target_info *info)
+ u32 tid = info->tid;
+ int err;
+
+- err = down_interruptible(&target_list_sem);
++ err = mutex_lock_interruptible(&target_list_mutex);
+ if (err < 0)
+ return err;
+
+@@ -223,7 +225,7 @@ int target_add(struct target_info *info)
+ if (!err)
+ nr_targets++;
+ out:
+- up(&target_list_sem);
++ mutex_unlock(&target_list_mutex);
+
+ return err;
+ }
+@@ -248,7 +250,7 @@ static void target_destroy(struct iscsi_
+ module_put(THIS_MODULE);
+ }
+
+-/* @locking: target_list_sem must be locked */
++/* @locking: target_list_mutex must be locked */
+ static int __target_del(struct iscsi_target *target)
+ {
+ int err;
+@@ -283,7 +285,7 @@ int target_del(u32 id)
+ struct iscsi_target *target;
+ int err;
+
+- err = down_interruptible(&target_list_sem);
++ err = mutex_lock_interruptible(&target_list_mutex);
+ if (err < 0)
+ return err;
+
+@@ -295,7 +297,7 @@ int target_del(u32 id)
+
+ err = __target_del(target);
+ out:
+- up(&target_list_sem);
++ mutex_unlock(&target_list_mutex);
+
+ return err;
+ }
+@@ -305,7 +307,7 @@ void target_del_all(void)
+ struct iscsi_target *target, *tmp;
+ int err;
+
+- down(&target_list_sem);
++ mutex_lock(&target_list_mutex);
+
+ if (!list_empty(&target_list))
+ iprintk("Removing all connections, sessions and targets\n");
+@@ -319,7 +321,7 @@ void target_del_all(void)
+
+ next_target_id = 0;
+
+- up(&target_list_sem);
++ mutex_unlock(&target_list_mutex);
+ }
+
+ static void *iet_seq_start(struct seq_file *m, loff_t *pos)
+@@ -327,7 +329,7 @@ static void *iet_seq_start(struct seq_fi
+ int err;
+
+ /* are you sure this is to be interruptible? */
+- err = down_interruptible(&target_list_sem);
++ err = mutex_lock_interruptible(&target_list_mutex);
+ if (err < 0)
+ return ERR_PTR(err);
+
+@@ -341,7 +343,7 @@ static void *iet_seq_next(struct seq_fil
+
+ static void iet_seq_stop(struct seq_file *m, void *v)
+ {
+- up(&target_list_sem);
++ mutex_unlock(&target_list_mutex);
+ }
+
+ static int iet_seq_show(struct seq_file *m, void *p)
+Index: iscsitarget-1.4.20.2/kernel/volume.c
+===================================================================
+--- iscsitarget-1.4.20.2.orig/kernel/volume.c
++++ iscsitarget-1.4.20.2/kernel/volume.c
+@@ -6,6 +6,7 @@
+
+ #include <linux/types.h>
+ #include <linux/parser.h>
++#include <linux/blkdev.h>
+
+ #include "iscsi.h"
+ #include "iscsi_dbg.h"
+Index: iscsitarget-1.4.20.2/kernel/wthread.c
+===================================================================
+--- iscsitarget-1.4.20.2.orig/kernel/wthread.c
++++ iscsitarget-1.4.20.2/kernel/wthread.c
+@@ -67,15 +67,6 @@ static int worker_thread(void *arg)
+ struct iscsi_conn *conn;
+ DECLARE_WAITQUEUE(wait, current);
+
+- get_io_context(GFP_KERNEL, -1);
+-
+- if (!current->io_context)
+- eprintk("%s\n", "Failed to get IO context");
+- else if (info->wthread_ioc)
+- copy_io_context(&current->io_context, &info->wthread_ioc);
+- else
+- info->wthread_ioc = current->io_context;
+-
+ add_wait_queue(&info->wthread_sleep, &wait);
+
+ __set_current_state(TASK_RUNNING);
+@@ -100,16 +91,6 @@ static int worker_thread(void *arg)
+
+ remove_wait_queue(&info->wthread_sleep, &wait);
+
+- if (current->io_context) {
+- struct io_context *ioc = current->io_context;
+-
+- task_lock(current);
+- current->io_context = NULL;
+- task_unlock(current);
+-
+- put_io_context(ioc);
+- }
+-
+ return 0;
+ }
+
+@@ -160,7 +141,6 @@ int wthread_init(struct worker_thread_in
+ spin_lock_init(&info->wthread_lock);
+
+ info->nr_running_wthreads = 0;
+- info->wthread_ioc = NULL;
+
+ INIT_LIST_HEAD(&info->work_queue);
+ INIT_LIST_HEAD(&info->wthread_list);
+Index: iscsitarget-1.4.20.2/patches/compat-2.6.36.patch
+===================================================================
+--- /dev/null
++++ iscsitarget-1.4.20.2/patches/compat-2.6.36.patch
+@@ -0,0 +1,78 @@
++diff --git a/kernel/iscsi.h b/kernel/iscsi.h
++index f9076f2..da0cdfd 100644
++--- a/kernel/iscsi.h
+++++ b/kernel/iscsi.h
++@@ -8,6 +8,7 @@
++ #ifndef __ISCSI_H__
++ #define __ISCSI_H__
++
+++#include <linux/blkdev.h>
++ #include <linux/completion.h>
++ #include <linux/pagemap.h>
++ #include <linux/seq_file.h>
++@@ -93,6 +94,8 @@ struct worker_thread_info {
++ struct list_head work_queue;
++
++ wait_queue_head_t wthread_sleep;
+++
+++ struct io_context *wthread_ioc;
++ };
++
++ struct iscsi_cmnd;
++diff --git a/kernel/volume.c b/kernel/volume.c
++index ecffa21..2c9a698 100644
++--- a/kernel/volume.c
+++++ b/kernel/volume.c
++@@ -6,7 +6,6 @@
++
++ #include <linux/types.h>
++ #include <linux/parser.h>
++-#include <linux/blkdev.h>
++
++ #include "iscsi.h"
++ #include "iscsi_dbg.h"
++diff --git a/kernel/wthread.c b/kernel/wthread.c
++index 884c03a..997a3d6 100644
++--- a/kernel/wthread.c
+++++ b/kernel/wthread.c
++@@ -67,6 +67,15 @@ static int worker_thread(void *arg)
++ struct iscsi_conn *conn;
++ DECLARE_WAITQUEUE(wait, current);
++
+++ get_io_context(GFP_KERNEL, -1);
+++
+++ if (!current->io_context)
+++ eprintk("%s\n", "Failed to get IO context");
+++ else if (info->wthread_ioc)
+++ copy_io_context(¤t->io_context, &info->wthread_ioc);
+++ else
+++ info->wthread_ioc = current->io_context;
+++
++ add_wait_queue(&info->wthread_sleep, &wait);
++
++ __set_current_state(TASK_RUNNING);
++@@ -91,6 +100,16 @@ static int worker_thread(void *arg)
++
++ remove_wait_queue(&info->wthread_sleep, &wait);
++
+++ if (current->io_context) {
+++ struct io_context *ioc = current->io_context;
+++
+++ task_lock(current);
+++ current->io_context = NULL;
+++ task_unlock(current);
+++
+++ put_io_context(ioc);
+++ }
+++
++ return 0;
++ }
++
++@@ -141,6 +160,7 @@ int wthread_init(struct worker_thread_info *info)
++ spin_lock_init(&info->wthread_lock);
++
++ info->nr_running_wthreads = 0;
+++ info->wthread_ioc = NULL;
++
++ INIT_LIST_HEAD(&info->work_queue);
++ INIT_LIST_HEAD(&info->wthread_list);
diff --git a/recipes/iscsi-target/iscsi-target_1.4.20.2.bb b/recipes/iscsi-target/iscsi-target_1.4.20.2.bb
index db85aba929..1a02a65b79 100644
--- a/recipes/iscsi-target/iscsi-target_1.4.20.2.bb
+++ b/recipes/iscsi-target/iscsi-target_1.4.20.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://iscsitarget.sourceforge.net/"
LICENSE = "GPL"
DEPENDS = "openssl"
RRECOMMENDS_${PN} = "kernel-module-crc32c kernel-module-libcrc32c"
-PR = "r0"
+PR = "r1"
# this recipe has a DEFAULT_PREFERENCE -1 for beagleboard
# actually this probably is only needed for angstrom and minimal
@@ -20,6 +20,8 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/iscsitarget/iscsitarget-${PV}.tar.gz \
file://ietd.conf \
file://init \
file://Makefile.patch \
+ file://iscsi-target-svnr373.patch \
+ file://2.6.37-compat.patch \
"
SRC_URI[md5sum] = "2f23c0bfe124d79f5c20e34ef2aaff82"
SRC_URI[sha256sum] = "0f3c8e2c2038fbbd7059d1efdd428260013212daca75c1d56abbeec33cb8d388"