Index: iscsitarget-1.4.19/kernel/conn.c =================================================================== --- iscsitarget-1.4.19.orig/kernel/conn.c +++ iscsitarget-1.4.19/kernel/conn.c @@ -6,6 +6,7 @@ #include #include +#include #include #include "iscsi.h" @@ -42,8 +43,13 @@ void conn_info_show(struct seq_file *seq sk = conn->sock->sk; switch (sk->sk_family) { case AF_INET: +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 32)) + snprintf(buf, sizeof(buf), + "%u.%u.%u.%u", NIPQUAD(inet_sk(sk)->inet_daddr)); +#else snprintf(buf, sizeof(buf), "%u.%u.%u.%u", NIPQUAD(inet_sk(sk)->daddr)); +#endif break; case AF_INET6: snprintf(buf, sizeof(buf), "[%pI6]", Index: iscsitarget-1.4.19/kernel/iscsi.h =================================================================== --- iscsitarget-1.4.19.orig/kernel/iscsi.h +++ iscsitarget-1.4.19/kernel/iscsi.h @@ -14,6 +14,7 @@ #include #include #include +#include #include #include "iscsi_hdr.h" @@ -126,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_sem; struct completion *done; }; Index: iscsitarget-1.4.19/kernel/target.c =================================================================== --- iscsitarget-1.4.19.orig/kernel/target.c +++ iscsitarget-1.4.19/kernel/target.c @@ -11,7 +11,7 @@ #define MAX_NR_TARGETS (1UL << 30) static LIST_HEAD(target_list); -static DECLARE_MUTEX(target_list_sem); +static DEFINE_MUTEX(target_list_sem); static u32 next_target_id; static u32 nr_targets; @@ -48,16 +48,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_sem); else - down(&target->target_sem); + mutex_lock(&target->target_sem); return err; } inline void target_unlock(struct iscsi_target *target) { - up(&target->target_sem); + mutex_unlock(&target->target_sem); } static struct iscsi_target *__target_lookup_by_id(u32 id) @@ -86,9 +86,9 @@ struct iscsi_target *target_lookup_by_id { struct iscsi_target *target; - down(&target_list_sem); + mutex_lock(&target_list_sem); target = __target_lookup_by_id(id); - up(&target_list_sem); + mutex_unlock(&target_list_sem); return target; } @@ -157,7 +157,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_sem); spin_lock_init(&target->session_list_lock); INIT_LIST_HEAD(&target->session_list); @@ -195,7 +195,7 @@ int target_add(struct target_info *info) int err = -EEXIST; u32 tid = info->tid; - down(&target_list_sem); + mutex_lock(&target_list_sem); if (nr_targets > MAX_NR_TARGETS) { err = -EBUSY; @@ -220,7 +220,7 @@ int target_add(struct target_info *info) if (!(err = iscsi_target_create(info, tid))) nr_targets++; out: - up(&target_list_sem); + mutex_unlock(&target_list_sem); return err; } @@ -266,7 +266,7 @@ int __target_del(struct iscsi_target *ta int target_del(u32 id) { struct iscsi_target *target; - int err = down_interruptible(&target_list_sem); + int err = mutex_lock_interruptible(&target_list_sem); if (err < 0) return err; @@ -278,7 +278,7 @@ int target_del(u32 id) err = __target_del(target); out: - up(&target_list_sem); + mutex_unlock(&target_list_sem); return err; } @@ -287,7 +287,7 @@ void target_del_all(void) DECLARE_COMPLETION_ONSTACK(done); struct iscsi_target *target, *tmp; - down(&target_list_sem); + mutex_lock(&target_list_sem); if (!list_empty(&target_list)) iprintk("Removing all connections, sessions and targets\n"); @@ -302,7 +302,7 @@ void target_del_all(void) next_target_id = 0; - up(&target_list_sem); + mutex_unlock(&target_list_sem); } static void *iet_seq_start(struct seq_file *m, loff_t *pos) @@ -310,7 +310,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_sem); if (err < 0) return ERR_PTR(err); @@ -324,7 +324,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_sem); } static int iet_seq_show(struct seq_file *m, void *p) Index: iscsitarget-1.4.19/kernel/file-io.c =================================================================== --- iscsitarget-1.4.19.orig/kernel/file-io.c +++ iscsitarget-1.4.19/kernel/file-io.c @@ -82,13 +82,14 @@ static int fileio_sync(struct iet_volume if (tio) { ppos = (loff_t) tio->idx << PAGE_CACHE_SHIFT; + ppos += tio->offset; count = tio->size; } else { ppos = 0; count = lu->blk_cnt << lu->blk_shift; } - res = sync_page_range(inode, mapping, ppos, count); + res = filemap_write_and_wait_range(mapping, ppos, ppos + count - 1); if (res) { eprintk("I/O error: syncing pages failed: %d\n", res); return -EIO;