aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-02-07 14:29:53 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2006-02-07 14:29:53 -0800
commit24e1d1b5b5ff506904493ca3bacc464f2f059866 (patch)
treeed6e38223c77bc2fa48b914e407b205a437c3a5b /driver
parent6270aa63b3ee5dcf78aa915719a0425bbee176ee (diff)
downloadpatches-24e1d1b5b5ff506904493ca3bacc464f2f059866.tar.gz
more patches added
Diffstat (limited to 'driver')
-rw-r--r--driver/aoe-don-t-request-ata-device-id-on-ata-error.patch36
-rw-r--r--driver/aoe-support-multiple-aoe-listeners.patch59
-rw-r--r--driver/aoe-update-version-to-22.patch24
-rw-r--r--driver/kobj_map-semaphore-to-mutex-conversion.patch350
4 files changed, 469 insertions, 0 deletions
diff --git a/driver/aoe-don-t-request-ata-device-id-on-ata-error.patch b/driver/aoe-don-t-request-ata-device-id-on-ata-error.patch
new file mode 100644
index 0000000000000..48460c7b6e0ac
--- /dev/null
+++ b/driver/aoe-don-t-request-ata-device-id-on-ata-error.patch
@@ -0,0 +1,36 @@
+From ecashin@coraid.com Tue Feb 7 08:45:58 2006
+Message-ID: <80311f892d2d2a1267fff540f00786e5@coraid.com>
+From: "Ed L. Cashin" <ecashin@coraid.com>
+Date: Tue, 7 Feb 2006 11:37:24 -0500
+Cc: ecashin@coraid.com, Greg K-H <greg@kroah.com>
+Subject: aoe [2/3]: don't request ATA device ID on ATA error
+
+On an ATA error response, take the device down instead of
+sending another ATA device identify command.
+
+Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com>
+
+
+---
+ drivers/block/aoe/aoecmd.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- gregkh-2.6.orig/drivers/block/aoe/aoecmd.c
++++ gregkh-2.6/drivers/block/aoe/aoecmd.c
+@@ -517,6 +517,8 @@ aoecmd_ata_rsp(struct sk_buff *skb)
+ ahout = (struct aoe_atahdr *) (f->data + sizeof(struct aoe_hdr));
+ buf = f->buf;
+
++ if (ahout->cmdstat == WIN_IDENTIFY)
++ d->flags &= ~DEVFL_PAUSE;
+ if (ahin->cmdstat & 0xa9) { /* these bits cleared on success */
+ printk(KERN_CRIT "aoe: aoecmd_ata_rsp: ata error cmd=%2.2Xh "
+ "stat=%2.2Xh from e%ld.%ld\n",
+@@ -549,7 +551,6 @@ aoecmd_ata_rsp(struct sk_buff *skb)
+ return;
+ }
+ ataid_complete(d, (char *) (ahin+1));
+- d->flags &= ~DEVFL_PAUSE;
+ break;
+ default:
+ printk(KERN_INFO "aoe: aoecmd_ata_rsp: unrecognized "
diff --git a/driver/aoe-support-multiple-aoe-listeners.patch b/driver/aoe-support-multiple-aoe-listeners.patch
new file mode 100644
index 0000000000000..9fd5a82d64854
--- /dev/null
+++ b/driver/aoe-support-multiple-aoe-listeners.patch
@@ -0,0 +1,59 @@
+From ecashin@coraid.com Tue Feb 7 08:35:37 2006
+Message-ID: <ec00c288a47234f512469754034c6f88@coraid.com>
+From: "Ed L. Cashin" <ecashin@coraid.com>
+Date: Tue, 7 Feb 2006 11:26:39 -0500
+Cc: ecashin@coraid.com, Greg K-H <greg@kroah.com>
+Subject: aoe [1/3]: support multiple AoE listeners
+
+
+Always clone incoming skbs, allowing other AoE listeners
+to exist in the kernel.
+
+Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/aoe/aoenet.c | 22 +++++-----------------
+ 1 file changed, 5 insertions(+), 17 deletions(-)
+
+--- gregkh-2.6.orig/drivers/block/aoe/aoenet.c
++++ gregkh-2.6/drivers/block/aoe/aoenet.c
+@@ -92,18 +92,6 @@ mac_addr(char addr[6])
+ return __be64_to_cpu(n);
+ }
+
+-static struct sk_buff *
+-skb_check(struct sk_buff *skb)
+-{
+- if (skb_is_nonlinear(skb))
+- if ((skb = skb_share_check(skb, GFP_ATOMIC)))
+- if (skb_linearize(skb, GFP_ATOMIC) < 0) {
+- dev_kfree_skb(skb);
+- return NULL;
+- }
+- return skb;
+-}
+-
+ void
+ aoenet_xmit(struct sk_buff *sl)
+ {
+@@ -125,14 +113,14 @@ aoenet_rcv(struct sk_buff *skb, struct n
+ struct aoe_hdr *h;
+ u32 n;
+
+- skb = skb_check(skb);
+- if (!skb)
++ skb = skb_share_check(skb, GFP_ATOMIC);
++ if (skb == NULL)
+ return 0;
+-
++ if (skb_is_nonlinear(skb))
++ if (skb_linearize(skb, GFP_ATOMIC) < 0)
++ goto exit;
+ if (!is_aoe_netif(ifp))
+ goto exit;
+-
+- //skb->len += ETH_HLEN; /* (1) */
+ skb_push(skb, ETH_HLEN); /* (1) */
+
+ h = (struct aoe_hdr *) skb->mac.raw;
diff --git a/driver/aoe-update-version-to-22.patch b/driver/aoe-update-version-to-22.patch
new file mode 100644
index 0000000000000..41fa27d71e982
--- /dev/null
+++ b/driver/aoe-update-version-to-22.patch
@@ -0,0 +1,24 @@
+From ecashin@coraid.com Tue Feb 7 08:58:03 2006
+Message-ID: <90e15e828c9fdf80585f67aed54dca38@coraid.com>
+Date: Tue, 7 Feb 2006 11:37:36 -0500
+From: "Ed L. Cashin" <ecashin@coraid.com>
+Cc: ecashin@coraid.com, Greg K-H <greg@kroah.com>
+Subject: aoe [3/3]: update version to 22
+
+Increase version number to 22.
+
+Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com>
+
+---
+ drivers/block/aoe/aoe.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- gregkh-2.6.orig/drivers/block/aoe/aoe.h
++++ gregkh-2.6/drivers/block/aoe/aoe.h
+@@ -1,5 +1,5 @@
+ /* Copyright (c) 2004 Coraid, Inc. See COPYING for GPL terms. */
+-#define VERSION "21"
++#define VERSION "22"
+ #define AOE_MAJOR 152
+ #define DEVICE_NAME "aoe"
+
diff --git a/driver/kobj_map-semaphore-to-mutex-conversion.patch b/driver/kobj_map-semaphore-to-mutex-conversion.patch
new file mode 100644
index 0000000000000..57ca5056167c8
--- /dev/null
+++ b/driver/kobj_map-semaphore-to-mutex-conversion.patch
@@ -0,0 +1,350 @@
+From akpm@osdl.org Mon Feb 6 14:10:39 2006
+Message-Id: <200602062210.k16MAa5X031577@shell0.pdx.osdl.net>
+Subject: kobj_map semaphore to mutex conversion
+To: jes@sgi.com, greg@kroah.com, mm-commits@vger.kernel.org
+From: akpm@osdl.org
+Date: Mon, 6 Feb 2006 14:12:43 -0800
+
+From: Jes Sorensen <jes@sgi.com>
+
+Convert the kobj_map code to use a mutex instead of a semaphore. It
+converts the single two users as well, genhd.c and char_dev.c.
+
+Signed-off-by: Jes Sorensen <jes@sgi.com>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ block/genhd.c | 31 ++++++++++++++++---------------
+ drivers/base/map.c | 21 +++++++++++----------
+ fs/char_dev.c | 17 +++++++++--------
+ include/linux/kobj_map.h | 4 ++--
+ 4 files changed, 38 insertions(+), 35 deletions(-)
+
+--- gregkh-2.6.orig/block/genhd.c
++++ gregkh-2.6/block/genhd.c
+@@ -15,12 +15,13 @@
+ #include <linux/kmod.h>
+ #include <linux/kobj_map.h>
+ #include <linux/buffer_head.h>
++#include <linux/mutex.h>
+
+ #define MAX_PROBE_HASH 255 /* random */
+
+ static struct subsystem block_subsys;
+
+-static DECLARE_MUTEX(block_subsys_sem);
++static DEFINE_MUTEX(block_subsys_lock);
+
+ /*
+ * Can be deleted altogether. Later.
+@@ -46,7 +47,7 @@ struct blkdev_info {
+ /*
+ * iterate over a list of blkdev_info structures. allows
+ * the major_names array to be iterated over from outside this file
+- * must be called with the block_subsys_sem held
++ * must be called with the block_subsys_lock held
+ */
+ void *get_next_blkdev(void *dev)
+ {
+@@ -85,20 +86,20 @@ out:
+
+ void *acquire_blkdev_list(void)
+ {
+- down(&block_subsys_sem);
++ mutex_lock(&block_subsys_lock);
+ return get_next_blkdev(NULL);
+ }
+
+ void release_blkdev_list(void *dev)
+ {
+- up(&block_subsys_sem);
++ mutex_unlock(&block_subsys_lock);
+ kfree(dev);
+ }
+
+
+ /*
+ * Count the number of records in the blkdev_list.
+- * must be called with the block_subsys_sem held
++ * must be called with the block_subsys_lock held
+ */
+ int count_blkdev_list(void)
+ {
+@@ -118,7 +119,7 @@ int count_blkdev_list(void)
+ /*
+ * extract the major and name values from a blkdev_info struct
+ * passed in as a void to *dev. Must be called with
+- * block_subsys_sem held
++ * block_subsys_lock held
+ */
+ int get_blkdev_info(void *dev, int *major, char **name)
+ {
+@@ -138,7 +139,7 @@ int register_blkdev(unsigned int major,
+ struct blk_major_name **n, *p;
+ int index, ret = 0;
+
+- down(&block_subsys_sem);
++ mutex_lock(&block_subsys_lock);
+
+ /* temporary */
+ if (major == 0) {
+@@ -183,7 +184,7 @@ int register_blkdev(unsigned int major,
+ kfree(p);
+ }
+ out:
+- up(&block_subsys_sem);
++ mutex_unlock(&block_subsys_lock);
+ return ret;
+ }
+
+@@ -197,7 +198,7 @@ int unregister_blkdev(unsigned int major
+ int index = major_to_index(major);
+ int ret = 0;
+
+- down(&block_subsys_sem);
++ mutex_lock(&block_subsys_lock);
+ for (n = &major_names[index]; *n; n = &(*n)->next)
+ if ((*n)->major == major)
+ break;
+@@ -207,7 +208,7 @@ int unregister_blkdev(unsigned int major
+ p = *n;
+ *n = p->next;
+ }
+- up(&block_subsys_sem);
++ mutex_unlock(&block_subsys_lock);
+ kfree(p);
+
+ return ret;
+@@ -301,7 +302,7 @@ static void *part_start(struct seq_file
+ struct list_head *p;
+ loff_t l = *pos;
+
+- down(&block_subsys_sem);
++ mutex_lock(&block_subsys_lock);
+ list_for_each(p, &block_subsys.kset.list)
+ if (!l--)
+ return list_entry(p, struct gendisk, kobj.entry);
+@@ -318,7 +319,7 @@ static void *part_next(struct seq_file *
+
+ static void part_stop(struct seq_file *part, void *v)
+ {
+- up(&block_subsys_sem);
++ mutex_unlock(&block_subsys_lock);
+ }
+
+ static int show_partition(struct seq_file *part, void *v)
+@@ -377,7 +378,7 @@ static struct kobject *base_probe(dev_t
+
+ static int __init genhd_device_init(void)
+ {
+- bdev_map = kobj_map_init(base_probe, &block_subsys_sem);
++ bdev_map = kobj_map_init(base_probe, &block_subsys_lock);
+ blk_dev_init();
+ subsystem_register(&block_subsys);
+ return 0;
+@@ -611,7 +612,7 @@ static void *diskstats_start(struct seq_
+ loff_t k = *pos;
+ struct list_head *p;
+
+- down(&block_subsys_sem);
++ mutex_lock(&block_subsys_lock);
+ list_for_each(p, &block_subsys.kset.list)
+ if (!k--)
+ return list_entry(p, struct gendisk, kobj.entry);
+@@ -628,7 +629,7 @@ static void *diskstats_next(struct seq_f
+
+ static void diskstats_stop(struct seq_file *part, void *v)
+ {
+- up(&block_subsys_sem);
++ mutex_unlock(&block_subsys_lock);
+ }
+
+ static int diskstats_show(struct seq_file *s, void *v)
+--- gregkh-2.6.orig/drivers/base/map.c
++++ gregkh-2.6/drivers/base/map.c
+@@ -11,6 +11,7 @@
+
+ #include <linux/module.h>
+ #include <linux/slab.h>
++#include <linux/mutex.h>
+ #include <linux/kdev_t.h>
+ #include <linux/kobject.h>
+ #include <linux/kobj_map.h>
+@@ -25,7 +26,7 @@ struct kobj_map {
+ int (*lock)(dev_t, void *);
+ void *data;
+ } *probes[255];
+- struct semaphore *sem;
++ struct mutex *lock;
+ };
+
+ int kobj_map(struct kobj_map *domain, dev_t dev, unsigned long range,
+@@ -53,7 +54,7 @@ int kobj_map(struct kobj_map *domain, de
+ p->range = range;
+ p->data = data;
+ }
+- down(domain->sem);
++ mutex_lock(domain->lock);
+ for (i = 0, p -= n; i < n; i++, p++, index++) {
+ struct probe **s = &domain->probes[index % 255];
+ while (*s && (*s)->range < range)
+@@ -61,7 +62,7 @@ int kobj_map(struct kobj_map *domain, de
+ p->next = *s;
+ *s = p;
+ }
+- up(domain->sem);
++ mutex_unlock(domain->lock);
+ return 0;
+ }
+
+@@ -75,7 +76,7 @@ void kobj_unmap(struct kobj_map *domain,
+ if (n > 255)
+ n = 255;
+
+- down(domain->sem);
++ mutex_lock(domain->lock);
+ for (i = 0; i < n; i++, index++) {
+ struct probe **s;
+ for (s = &domain->probes[index % 255]; *s; s = &(*s)->next) {
+@@ -88,7 +89,7 @@ void kobj_unmap(struct kobj_map *domain,
+ }
+ }
+ }
+- up(domain->sem);
++ mutex_unlock(domain->lock);
+ kfree(found);
+ }
+
+@@ -99,7 +100,7 @@ struct kobject *kobj_lookup(struct kobj_
+ unsigned long best = ~0UL;
+
+ retry:
+- down(domain->sem);
++ mutex_lock(domain->lock);
+ for (p = domain->probes[MAJOR(dev) % 255]; p; p = p->next) {
+ struct kobject *(*probe)(dev_t, int *, void *);
+ struct module *owner;
+@@ -120,7 +121,7 @@ retry:
+ module_put(owner);
+ continue;
+ }
+- up(domain->sem);
++ mutex_unlock(domain->lock);
+ kobj = probe(dev, index, data);
+ /* Currently ->owner protects _only_ ->probe() itself. */
+ module_put(owner);
+@@ -128,11 +129,11 @@ retry:
+ return kobj;
+ goto retry;
+ }
+- up(domain->sem);
++ mutex_unlock(domain->lock);
+ return NULL;
+ }
+
+-struct kobj_map *kobj_map_init(kobj_probe_t *base_probe, struct semaphore *sem)
++struct kobj_map *kobj_map_init(kobj_probe_t *base_probe, struct mutex *lock)
+ {
+ struct kobj_map *p = kmalloc(sizeof(struct kobj_map), GFP_KERNEL);
+ struct probe *base = kzalloc(sizeof(*base), GFP_KERNEL);
+@@ -149,6 +150,6 @@ struct kobj_map *kobj_map_init(kobj_prob
+ base->get = base_probe;
+ for (i = 0; i < 255; i++)
+ p->probes[i] = base;
+- p->sem = sem;
++ p->lock = lock;
+ return p;
+ }
+--- gregkh-2.6.orig/fs/char_dev.c
++++ gregkh-2.6/fs/char_dev.c
+@@ -19,6 +19,7 @@
+ #include <linux/kobject.h>
+ #include <linux/kobj_map.h>
+ #include <linux/cdev.h>
++#include <linux/mutex.h>
+
+ #ifdef CONFIG_KMOD
+ #include <linux/kmod.h>
+@@ -28,7 +29,7 @@ static struct kobj_map *cdev_map;
+
+ #define MAX_PROBE_HASH 255 /* random */
+
+-static DECLARE_MUTEX(chrdevs_lock);
++static DEFINE_MUTEX(chrdevs_lock);
+
+ static struct char_device_struct {
+ struct char_device_struct *next;
+@@ -88,13 +89,13 @@ out:
+
+ void *acquire_chrdev_list(void)
+ {
+- down(&chrdevs_lock);
++ mutex_lock(&chrdevs_lock);
+ return get_next_chrdev(NULL);
+ }
+
+ void release_chrdev_list(void *dev)
+ {
+- up(&chrdevs_lock);
++ mutex_unlock(&chrdevs_lock);
+ kfree(dev);
+ }
+
+@@ -151,7 +152,7 @@ __register_chrdev_region(unsigned int ma
+
+ memset(cd, 0, sizeof(struct char_device_struct));
+
+- down(&chrdevs_lock);
++ mutex_lock(&chrdevs_lock);
+
+ /* temporary */
+ if (major == 0) {
+@@ -186,10 +187,10 @@ __register_chrdev_region(unsigned int ma
+ }
+ cd->next = *cp;
+ *cp = cd;
+- up(&chrdevs_lock);
++ mutex_unlock(&chrdevs_lock);
+ return cd;
+ out:
+- up(&chrdevs_lock);
++ mutex_unlock(&chrdevs_lock);
+ kfree(cd);
+ return ERR_PTR(ret);
+ }
+@@ -200,7 +201,7 @@ __unregister_chrdev_region(unsigned majo
+ struct char_device_struct *cd = NULL, **cp;
+ int i = major_to_index(major);
+
+- down(&chrdevs_lock);
++ mutex_lock(&chrdevs_lock);
+ for (cp = &chrdevs[i]; *cp; cp = &(*cp)->next)
+ if ((*cp)->major == major &&
+ (*cp)->baseminor == baseminor &&
+@@ -210,7 +211,7 @@ __unregister_chrdev_region(unsigned majo
+ cd = *cp;
+ *cp = cd->next;
+ }
+- up(&chrdevs_lock);
++ mutex_unlock(&chrdevs_lock);
+ return cd;
+ }
+
+--- gregkh-2.6.orig/include/linux/kobj_map.h
++++ gregkh-2.6/include/linux/kobj_map.h
+@@ -1,6 +1,6 @@
+ #ifdef __KERNEL__
+
+-#include <asm/semaphore.h>
++#include <linux/mutex.h>
+
+ typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
+ struct kobj_map;
+@@ -9,6 +9,6 @@ int kobj_map(struct kobj_map *, dev_t, u
+ kobj_probe_t *, int (*)(dev_t, void *), void *);
+ void kobj_unmap(struct kobj_map *, dev_t, unsigned long);
+ struct kobject *kobj_lookup(struct kobj_map *, dev_t, int *);
+-struct kobj_map *kobj_map_init(kobj_probe_t *, struct semaphore *);
++struct kobj_map *kobj_map_init(kobj_probe_t *, struct mutex *);
+
+ #endif