Files
sablink-distro/sys-block/iscsitarget/files/iscsitarget-2.6.37.patch
T
2011-01-08 13:33:54 +01:00

230 lines
5.8 KiB
Diff

Index: kernel/wthread.c
===================================================================
--- kernel/wthread.c (revision 373)
+++ kernel/wthread.c (working copy)
@@ -71,9 +71,12 @@ static int worker_thread(void *arg)
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
+ else if (info->wthread_ioc &&
+ atomic_long_read(&info->wthread_ioc->refcount)) {
+ atomic_long_inc(&info->wthread_ioc->refcount);
+ put_io_context(current->io_context);
+ current->io_context = info->wthread_ioc;
+ } else
info->wthread_ioc = current->io_context;
add_wait_queue(&info->wthread_sleep, &wait);
Index: kernel/config.c
===================================================================
--- kernel/config.c (revision 373)
+++ kernel/config.c (working copy)
@@ -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: kernel/iscsi.h
===================================================================
--- kernel/iscsi.h (revision 373)
+++ kernel/iscsi.h (working copy)
@@ -130,7 +130,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: kernel/target.c
===================================================================
--- kernel/target.c (revision 373)
+++ kernel/target.c (working copy)
@@ -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;
@@ -204,7 +206,7 @@ int target_add(struct target_info *info)
goto out;
}
- if (__target_lookup_by_name(info->name) ||
+ if (__target_lookup_by_name(info->name) ||
(tid && __target_lookup_by_id(tid))) {
err = -EEXIST;
goto out;
@@ -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)