diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-03-27 09:47:21 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-03-27 09:47:21 -0800 |
commit | 457819ce81f7049f37509c4a2d7be9f16fea73a6 (patch) | |
tree | a9f1d3fb80e78928d18332304de8eb274a293935 /driver | |
parent | 949d096d0e2c09f95d29033a3058e2f7aa0780c4 (diff) | |
download | patches-457819ce81f7049f37509c4a2d7be9f16fea73a6.tar.gz |
2.6.16-git13 refresh
Diffstat (limited to 'driver')
-rw-r--r-- | driver/aoe-allow-network-interface-migration-on-packet-retransmit.patch | 26 | ||||
-rw-r--r-- | driver/aoe-do-not-stop-retransmit-timer-when-device-goes-down.patch | 38 | ||||
-rw-r--r-- | driver/aoe-don-t-request-ata-device-id-on-ata-error.patch | 36 | ||||
-rw-r--r-- | driver/aoe-increase-allowed-outstanding-packets.patch | 28 | ||||
-rw-r--r-- | driver/aoe-support-dynamic-resizing-of-aoe-devices.patch | 641 | ||||
-rw-r--r-- | driver/aoe-support-multiple-aoe-listeners.patch | 59 | ||||
-rw-r--r-- | driver/aoe-update-device-information-on-last-close.patch | 29 | ||||
-rw-r--r-- | driver/aoe-update-driver-compatibility-string.patch | 29 | ||||
-rw-r--r-- | driver/aoe-update-driver-version-number.patch | 26 | ||||
-rw-r--r-- | driver/aoe-update-version-to-22.patch | 24 | ||||
-rw-r--r-- | driver/aoe-use-less-confusing-driver-name.patch | 29 | ||||
-rw-r--r-- | driver/aoe-zero-packet-data-after-skb-allocation.patch | 27 | ||||
-rw-r--r-- | driver/sysfs-crash-debugging.patch | 16 |
13 files changed, 7 insertions, 1001 deletions
diff --git a/driver/aoe-allow-network-interface-migration-on-packet-retransmit.patch b/driver/aoe-allow-network-interface-migration-on-packet-retransmit.patch deleted file mode 100644 index d1daf36870e67..0000000000000 --- a/driver/aoe-allow-network-interface-migration-on-packet-retransmit.patch +++ /dev/null @@ -1,26 +0,0 @@ -From ecashin@coraid.com Thu Jan 19 11:11:56 2006 -Message-ID: <d856359f3883ba1b7f11683932a478be@coraid.com> -From: "Ed L. Cashin" <ecashin@coraid.com> -Date: Thu, 19 Jan 2006 13:46:25 -0500 -CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> -Subject: [PATCH 2.6.15-git9] aoe [5/8]: allow network interface migration on packet retransmit - -Retransmit to the current network interface for an AoE device. - -Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> - ---- - drivers/block/aoe/aoecmd.c | 2 ++ - 1 file changed, 2 insertions(+) - ---- gregkh-2.6.orig/drivers/block/aoe/aoecmd.c -+++ gregkh-2.6/drivers/block/aoe/aoecmd.c -@@ -286,6 +286,8 @@ rexmit(struct aoedev *d, struct frame *f - h = (struct aoe_hdr *) f->data; - f->tag = n; - h->tag = cpu_to_be32(n); -+ memcpy(h->dst, d->addr, sizeof h->dst); -+ memcpy(h->src, d->ifp->dev_addr, sizeof h->src); - - skb = skb_prepare(d, f); - if (skb) { diff --git a/driver/aoe-do-not-stop-retransmit-timer-when-device-goes-down.patch b/driver/aoe-do-not-stop-retransmit-timer-when-device-goes-down.patch deleted file mode 100644 index 04e735a49942f..0000000000000 --- a/driver/aoe-do-not-stop-retransmit-timer-when-device-goes-down.patch +++ /dev/null @@ -1,38 +0,0 @@ -From ecashin@coraid.com Wed Jan 25 11:20:59 2006 -Message-ID: <650dd8ca525b7e32c55292cba7c7eda2@coraid.com> -Date: Wed, 25 Jan 2006 13:54:44 -0500 -To: linux-kernel@vger.kernel.org -CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> -Subject: aoe: do not stop retransmit timer when device goes down -From: "Ed L. Cashin" <ecashin@coraid.com> - -This patch is a bugfix that follows and depends on the -eight aoe driver patches sent January 19th. - -Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/block/aoe/aoecmd.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- gregkh-2.6.orig/drivers/block/aoe/aoecmd.c -+++ gregkh-2.6/drivers/block/aoe/aoecmd.c -@@ -331,7 +331,7 @@ rexmit_timer(ulong vp) - spin_lock_irqsave(&d->lock, flags); - - if (d->flags & DEVFL_TKILL) { --tdie: spin_unlock_irqrestore(&d->lock, flags); -+ spin_unlock_irqrestore(&d->lock, flags); - return; - } - f = d->frames; -@@ -342,7 +342,7 @@ tdie: spin_unlock_irqrestore(&d->lock, - n /= HZ; - if (n > MAXWAIT) { /* waited too long. device failure. */ - aoedev_downdev(d); -- goto tdie; -+ break; - } - rexmit(d, f); - } 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 deleted file mode 100644 index 48460c7b6e0ac..0000000000000 --- a/driver/aoe-don-t-request-ata-device-id-on-ata-error.patch +++ /dev/null @@ -1,36 +0,0 @@ -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-increase-allowed-outstanding-packets.patch b/driver/aoe-increase-allowed-outstanding-packets.patch deleted file mode 100644 index 153be15771f6f..0000000000000 --- a/driver/aoe-increase-allowed-outstanding-packets.patch +++ /dev/null @@ -1,28 +0,0 @@ -From ecashin@coraid.com Thu Jan 19 11:06:22 2006 -Message-ID: <5debc908a0299c62aca98d7a08a00cba@coraid.com> -From: "Ed L. Cashin" <ecashin@coraid.com> -Date: Thu, 19 Jan 2006 13:46:20 -0500 -CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> -Subject: [PATCH 2.6.15-git9] aoe [3/8]: increase allowed outstanding packets - -Increase the number of AoE packets per device that can be outstanding -at one time, increasing performance. - -Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/block/aoe/aoecmd.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- gregkh-2.6.orig/drivers/block/aoe/aoecmd.c -+++ gregkh-2.6/drivers/block/aoe/aoecmd.c -@@ -647,7 +647,7 @@ aoecmd_cfg_rsp(struct sk_buff *skb) - ulong flags, sysminor, aoemajor; - u16 bufcnt; - struct sk_buff *sl; -- enum { MAXFRAMES = 8 }; -+ enum { MAXFRAMES = 16 }; - - h = (struct aoe_hdr *) skb->mac.raw; - ch = (struct aoe_cfghdr *) (h+1); diff --git a/driver/aoe-support-dynamic-resizing-of-aoe-devices.patch b/driver/aoe-support-dynamic-resizing-of-aoe-devices.patch deleted file mode 100644 index e9953e1b1a084..0000000000000 --- a/driver/aoe-support-dynamic-resizing-of-aoe-devices.patch +++ /dev/null @@ -1,641 +0,0 @@ -From ecashin@coraid.com Thu Jan 19 11:06:22 2006 -Message-ID: <8b8d2529e6e616530c1463e0284108db@coraid.com> -From: "Ed L. Cashin" <ecashin@coraid.com> -Date: Thu, 19 Jan 2006 13:46:19 -0500 -CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> -Subject: [PATCH 2.6.15-git9] aoe [2/8]: support dynamic resizing of AoE devices - - -Allow the driver to recognize AoE devices that have changed size. -Devices not in use are updated automatically, and devices that are in -use are updated at user request. - -Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - Documentation/aoe/mkdevs.sh | 2 - Documentation/aoe/udev.txt | 1 - drivers/block/aoe/aoe.h | 12 +- - drivers/block/aoe/aoeblk.c | 22 ++--- - drivers/block/aoe/aoechr.c | 37 +++++++++ - drivers/block/aoe/aoecmd.c | 177 +++++++++++++++++++++++++++++--------------- - drivers/block/aoe/aoedev.c | 69 +++++++++++------ - 7 files changed, 223 insertions(+), 97 deletions(-) - ---- gregkh-2.6.orig/Documentation/aoe/mkdevs.sh -+++ gregkh-2.6/Documentation/aoe/mkdevs.sh -@@ -27,6 +27,8 @@ rm -f $dir/discover - mknod -m 0200 $dir/discover c $MAJOR 3 - rm -f $dir/interfaces - mknod -m 0200 $dir/interfaces c $MAJOR 4 -+rm -f $dir/revalidate -+mknod -m 0200 $dir/revalidate c $MAJOR 5 - - export n_partitions - mkshelf=`echo $0 | sed 's!mkdevs!mkshelf!'` ---- gregkh-2.6.orig/Documentation/aoe/udev.txt -+++ gregkh-2.6/Documentation/aoe/udev.txt -@@ -18,6 +18,7 @@ - SUBSYSTEM="aoe", KERNEL="discover", NAME="etherd/%k", GROUP="disk", MODE="0220" - SUBSYSTEM="aoe", KERNEL="err", NAME="etherd/%k", GROUP="disk", MODE="0440" - SUBSYSTEM="aoe", KERNEL="interfaces", NAME="etherd/%k", GROUP="disk", MODE="0220" -+SUBSYSTEM="aoe", KERNEL="revalidate", NAME="etherd/%k", GROUP="disk", MODE="0220" - - # aoe block devices - KERNEL="etherd*", NAME="%k", GROUP="disk" ---- gregkh-2.6.orig/drivers/block/aoe/aoe.h -+++ gregkh-2.6/drivers/block/aoe/aoe.h -@@ -75,8 +75,9 @@ enum { - DEVFL_TKILL = (1<<1), /* flag for timer to know when to kill self */ - DEVFL_EXT = (1<<2), /* device accepts lba48 commands */ - DEVFL_CLOSEWAIT = (1<<3), /* device is waiting for all closes to revalidate */ -- DEVFL_WC_UPDATE = (1<<4), /* this device needs to update write cache status */ -- DEVFL_WORKON = (1<<4), -+ DEVFL_GDALLOC = (1<<4), /* need to alloc gendisk */ -+ DEVFL_PAUSE = (1<<5), -+ DEVFL_NEWSIZE = (1<<6), /* need to update dev size in block layer */ - - BUFFL_FAIL = 1, - }; -@@ -152,16 +153,17 @@ void aoechr_exit(void); - void aoechr_error(char *); - - void aoecmd_work(struct aoedev *d); --void aoecmd_cfg(ushort, unsigned char); -+void aoecmd_cfg(ushort aoemajor, unsigned char aoeminor); - void aoecmd_ata_rsp(struct sk_buff *); - void aoecmd_cfg_rsp(struct sk_buff *); -+void aoecmd_sleepwork(void *vp); - - int aoedev_init(void); - void aoedev_exit(void); - struct aoedev *aoedev_by_aoeaddr(int maj, int min); -+struct aoedev *aoedev_by_sysminor_m(ulong sysminor, ulong bufcnt); - void aoedev_downdev(struct aoedev *d); --struct aoedev *aoedev_set(ulong, unsigned char *, struct net_device *, ulong); --int aoedev_busy(void); -+int aoedev_isbusy(struct aoedev *d); - - int aoenet_init(void); - void aoenet_exit(void); ---- gregkh-2.6.orig/drivers/block/aoe/aoeblk.c -+++ gregkh-2.6/drivers/block/aoe/aoeblk.c -@@ -22,7 +22,9 @@ static ssize_t aoedisk_show_state(struct - return snprintf(page, PAGE_SIZE, - "%s%s\n", - (d->flags & DEVFL_UP) ? "up" : "down", -- (d->flags & DEVFL_CLOSEWAIT) ? ",closewait" : ""); -+ (d->flags & DEVFL_PAUSE) ? ",paused" : -+ (d->nopen && !(d->flags & DEVFL_UP)) ? ",closewait" : ""); -+ /* I'd rather see nopen exported so we can ditch closewait */ - } - static ssize_t aoedisk_show_mac(struct gendisk * disk, char *page) - { -@@ -107,8 +109,7 @@ aoeblk_release(struct inode *inode, stru - - spin_lock_irqsave(&d->lock, flags); - -- if (--d->nopen == 0 && (d->flags & DEVFL_CLOSEWAIT)) { -- d->flags &= ~DEVFL_CLOSEWAIT; -+ if (--d->nopen == 0 && !(d->flags & DEVFL_UP)) { - spin_unlock_irqrestore(&d->lock, flags); - aoecmd_cfg(d->aoemajor, d->aoeminor); - return 0; -@@ -158,14 +159,14 @@ aoeblk_make_request(request_queue_t *q, - } - - list_add_tail(&buf->bufs, &d->bufq); -- aoecmd_work(d); - -+ aoecmd_work(d); - sl = d->sendq_hd; - d->sendq_hd = d->sendq_tl = NULL; - - spin_unlock_irqrestore(&d->lock, flags); -- - aoenet_xmit(sl); -+ - return 0; - } - -@@ -205,7 +206,7 @@ aoeblk_gdalloc(void *vp) - printk(KERN_ERR "aoe: aoeblk_gdalloc: cannot allocate disk " - "structure for %ld.%ld\n", d->aoemajor, d->aoeminor); - spin_lock_irqsave(&d->lock, flags); -- d->flags &= ~DEVFL_WORKON; -+ d->flags &= ~DEVFL_GDALLOC; - spin_unlock_irqrestore(&d->lock, flags); - return; - } -@@ -218,7 +219,7 @@ aoeblk_gdalloc(void *vp) - "for %ld.%ld\n", d->aoemajor, d->aoeminor); - put_disk(gd); - spin_lock_irqsave(&d->lock, flags); -- d->flags &= ~DEVFL_WORKON; -+ d->flags &= ~DEVFL_GDALLOC; - spin_unlock_irqrestore(&d->lock, flags); - return; - } -@@ -235,18 +236,13 @@ aoeblk_gdalloc(void *vp) - - gd->queue = &d->blkq; - d->gd = gd; -- d->flags &= ~DEVFL_WORKON; -+ d->flags &= ~DEVFL_GDALLOC; - d->flags |= DEVFL_UP; - - spin_unlock_irqrestore(&d->lock, flags); - - add_disk(gd); - aoedisk_add_sysfs(d); -- -- printk(KERN_INFO "aoe: %012llx e%lu.%lu v%04x has %llu " -- "sectors\n", (unsigned long long)mac_addr(d->addr), -- d->aoemajor, d->aoeminor, -- d->fw_ver, (long long)d->ssize); - } - - void ---- gregkh-2.6.orig/drivers/block/aoe/aoechr.c -+++ gregkh-2.6/drivers/block/aoe/aoechr.c -@@ -13,6 +13,7 @@ enum { - MINOR_ERR = 2, - MINOR_DISCOVER, - MINOR_INTERFACES, -+ MINOR_REVALIDATE, - MSGSZ = 2048, - NARGS = 10, - NMSG = 100, /* message backlog to retain */ -@@ -41,6 +42,7 @@ static struct aoe_chardev chardevs[] = { - { MINOR_ERR, "err" }, - { MINOR_DISCOVER, "discover" }, - { MINOR_INTERFACES, "interfaces" }, -+ { MINOR_REVALIDATE, "revalidate" }, - }; - - static int -@@ -62,6 +64,39 @@ interfaces(const char __user *str, size_ - return 0; - } - -+static int -+revalidate(const char __user *str, size_t size) -+{ -+ int major, minor, n; -+ ulong flags; -+ struct aoedev *d; -+ char buf[16]; -+ -+ if (size >= sizeof buf) -+ return -EINVAL; -+ buf[sizeof buf - 1] = '\0'; -+ if (copy_from_user(buf, str, size)) -+ return -EFAULT; -+ -+ /* should be e%d.%d format */ -+ n = sscanf(buf, "e%d.%d", &major, &minor); -+ if (n != 2) { -+ printk(KERN_ERR "aoe: %s: invalid device specification\n", -+ __FUNCTION__); -+ return -EINVAL; -+ } -+ d = aoedev_by_aoeaddr(major, minor); -+ if (!d) -+ return -EINVAL; -+ -+ spin_lock_irqsave(&d->lock, flags); -+ d->flags |= DEVFL_PAUSE; -+ spin_unlock_irqrestore(&d->lock, flags); -+ aoecmd_cfg(major, minor); -+ -+ return 0; -+} -+ - void - aoechr_error(char *msg) - { -@@ -114,6 +149,8 @@ aoechr_write(struct file *filp, const ch - case MINOR_INTERFACES: - ret = interfaces(buf, cnt); - break; -+ case MINOR_REVALIDATE: -+ ret = revalidate(buf, cnt); - } - if (ret == 0) - ret = cnt; ---- gregkh-2.6.orig/drivers/block/aoe/aoecmd.c -+++ gregkh-2.6/drivers/block/aoe/aoecmd.c -@@ -8,6 +8,7 @@ - #include <linux/blkdev.h> - #include <linux/skbuff.h> - #include <linux/netdevice.h> -+#include <linux/genhd.h> - #include <asm/unaligned.h> - #include "aoe.h" - -@@ -189,12 +190,67 @@ aoecmd_ata_rw(struct aoedev *d, struct f - } - } - -+/* some callers cannot sleep, and they can call this function, -+ * transmitting the packets later, when interrupts are on -+ */ -+static struct sk_buff * -+aoecmd_cfg_pkts(ushort aoemajor, unsigned char aoeminor, struct sk_buff **tail) -+{ -+ struct aoe_hdr *h; -+ struct aoe_cfghdr *ch; -+ struct sk_buff *skb, *sl, *sl_tail; -+ struct net_device *ifp; -+ -+ sl = sl_tail = NULL; -+ -+ read_lock(&dev_base_lock); -+ for (ifp = dev_base; ifp; dev_put(ifp), ifp = ifp->next) { -+ dev_hold(ifp); -+ if (!is_aoe_netif(ifp)) -+ continue; -+ -+ skb = new_skb(ifp, sizeof *h + sizeof *ch); -+ if (skb == NULL) { -+ printk(KERN_INFO "aoe: aoecmd_cfg: skb alloc failure\n"); -+ continue; -+ } -+ if (sl_tail == NULL) -+ sl_tail = skb; -+ h = (struct aoe_hdr *) skb->mac.raw; -+ memset(h, 0, sizeof *h + sizeof *ch); -+ -+ memset(h->dst, 0xff, sizeof h->dst); -+ memcpy(h->src, ifp->dev_addr, sizeof h->src); -+ h->type = __constant_cpu_to_be16(ETH_P_AOE); -+ h->verfl = AOE_HVER; -+ h->major = cpu_to_be16(aoemajor); -+ h->minor = aoeminor; -+ h->cmd = AOECMD_CFG; -+ -+ skb->next = sl; -+ sl = skb; -+ } -+ read_unlock(&dev_base_lock); -+ -+ if (tail != NULL) -+ *tail = sl_tail; -+ return sl; -+} -+ - /* enters with d->lock held */ - void - aoecmd_work(struct aoedev *d) - { - struct frame *f; - struct buf *buf; -+ -+ if (d->flags & DEVFL_PAUSE) { -+ if (!aoedev_isbusy(d)) -+ d->sendq_hd = aoecmd_cfg_pkts(d->aoemajor, -+ d->aoeminor, &d->sendq_tl); -+ return; -+ } -+ - loop: - f = getframe(d, FREETAG); - if (f == NULL) -@@ -306,6 +362,37 @@ tdie: spin_unlock_irqrestore(&d->lock, - aoenet_xmit(sl); - } - -+/* this function performs work that has been deferred until sleeping is OK -+ */ -+void -+aoecmd_sleepwork(void *vp) -+{ -+ struct aoedev *d = (struct aoedev *) vp; -+ -+ if (d->flags & DEVFL_GDALLOC) -+ aoeblk_gdalloc(d); -+ -+ if (d->flags & DEVFL_NEWSIZE) { -+ struct block_device *bd; -+ unsigned long flags; -+ u64 ssize; -+ -+ ssize = d->gd->capacity; -+ bd = bdget_disk(d->gd, 0); -+ -+ if (bd) { -+ mutex_lock(&bd->bd_inode->i_mutex); -+ i_size_write(bd->bd_inode, (loff_t)ssize<<9); -+ mutex_unlock(&bd->bd_inode->i_mutex); -+ bdput(bd); -+ } -+ spin_lock_irqsave(&d->lock, flags); -+ d->flags |= DEVFL_UP; -+ d->flags &= ~DEVFL_NEWSIZE; -+ spin_unlock_irqrestore(&d->lock, flags); -+ } -+} -+ - static void - ataid_complete(struct aoedev *d, unsigned char *id) - { -@@ -340,21 +427,29 @@ ataid_complete(struct aoedev *d, unsigne - d->geo.heads = le16_to_cpu(get_unaligned((__le16 *) &id[55<<1])); - d->geo.sectors = le16_to_cpu(get_unaligned((__le16 *) &id[56<<1])); - } -+ -+ if (d->ssize != ssize) -+ printk(KERN_INFO "aoe: %012llx e%lu.%lu v%04x has %llu " -+ "sectors\n", (unsigned long long)mac_addr(d->addr), -+ d->aoemajor, d->aoeminor, -+ d->fw_ver, (long long)ssize); - d->ssize = ssize; - d->geo.start = 0; - if (d->gd != NULL) { - d->gd->capacity = ssize; -- d->flags |= DEVFL_UP; -- return; -- } -- if (d->flags & DEVFL_WORKON) { -- printk(KERN_INFO "aoe: ataid_complete: can't schedule work, it's already on! " -- "(This really shouldn't happen).\n"); -- return; -+ d->flags |= DEVFL_NEWSIZE; -+ } else { -+ if (d->flags & DEVFL_GDALLOC) { -+ printk(KERN_INFO "aoe: %s: %s e%lu.%lu, %s\n", -+ __FUNCTION__, -+ "can't schedule work for", -+ d->aoemajor, d->aoeminor, -+ "it's already on! (This really shouldn't happen).\n"); -+ return; -+ } -+ d->flags |= DEVFL_GDALLOC; - } -- INIT_WORK(&d->work, aoeblk_gdalloc, d); - schedule_work(&d->work); -- d->flags |= DEVFL_WORKON; - } - - static void -@@ -452,7 +547,7 @@ aoecmd_ata_rsp(struct sk_buff *skb) - return; - } - ataid_complete(d, (char *) (ahin+1)); -- /* d->flags |= DEVFL_WC_UPDATE; */ -+ d->flags &= ~DEVFL_PAUSE; - break; - default: - printk(KERN_INFO "aoe: aoecmd_ata_rsp: unrecognized " -@@ -485,51 +580,19 @@ aoecmd_ata_rsp(struct sk_buff *skb) - f->tag = FREETAG; - - aoecmd_work(d); -- - sl = d->sendq_hd; - d->sendq_hd = d->sendq_tl = NULL; - - spin_unlock_irqrestore(&d->lock, flags); -- - aoenet_xmit(sl); - } - - void - aoecmd_cfg(ushort aoemajor, unsigned char aoeminor) - { -- struct aoe_hdr *h; -- struct aoe_cfghdr *ch; -- struct sk_buff *skb, *sl; -- struct net_device *ifp; -- -- sl = NULL; -- -- read_lock(&dev_base_lock); -- for (ifp = dev_base; ifp; dev_put(ifp), ifp = ifp->next) { -- dev_hold(ifp); -- if (!is_aoe_netif(ifp)) -- continue; -- -- skb = new_skb(ifp, sizeof *h + sizeof *ch); -- if (skb == NULL) { -- printk(KERN_INFO "aoe: aoecmd_cfg: skb alloc failure\n"); -- continue; -- } -- h = (struct aoe_hdr *) skb->mac.raw; -- memset(h, 0, sizeof *h + sizeof *ch); -- -- memset(h->dst, 0xff, sizeof h->dst); -- memcpy(h->src, ifp->dev_addr, sizeof h->src); -- h->type = __constant_cpu_to_be16(ETH_P_AOE); -- h->verfl = AOE_HVER; -- h->major = cpu_to_be16(aoemajor); -- h->minor = aoeminor; -- h->cmd = AOECMD_CFG; -+ struct sk_buff *sl; - -- skb->next = sl; -- sl = skb; -- } -- read_unlock(&dev_base_lock); -+ sl = aoecmd_cfg_pkts(aoemajor, aoeminor, NULL); - - aoenet_xmit(sl); - } -@@ -562,9 +625,6 @@ aoecmd_ata_id(struct aoedev *d) - f->waited = 0; - f->writedatalen = 0; - -- /* this message initializes the device, so we reset the rttavg */ -- d->rttavg = MAXTIMER; -- - /* set up ata header */ - ah->scnt = 1; - ah->cmdstat = WIN_IDENTIFY; -@@ -572,12 +632,8 @@ aoecmd_ata_id(struct aoedev *d) - - skb = skb_prepare(d, f); - -- /* we now want to start the rexmit tracking */ -- d->flags &= ~DEVFL_TKILL; -- d->timer.data = (ulong) d; -+ d->rttavg = MAXTIMER; - d->timer.function = rexmit_timer; -- d->timer.expires = jiffies + TIMERTICK; -- add_timer(&d->timer); - - return skb; - } -@@ -619,23 +675,28 @@ aoecmd_cfg_rsp(struct sk_buff *skb) - if (bufcnt > MAXFRAMES) /* keep it reasonable */ - bufcnt = MAXFRAMES; - -- d = aoedev_set(sysminor, h->src, skb->dev, bufcnt); -+ d = aoedev_by_sysminor_m(sysminor, bufcnt); - if (d == NULL) { -- printk(KERN_INFO "aoe: aoecmd_cfg_rsp: device set failure\n"); -+ printk(KERN_INFO "aoe: aoecmd_cfg_rsp: device sysminor_m failure\n"); - return; - } - - spin_lock_irqsave(&d->lock, flags); - -- if (d->flags & (DEVFL_UP | DEVFL_CLOSEWAIT)) { -+ /* permit device to migrate mac and network interface */ -+ d->ifp = skb->dev; -+ memcpy(d->addr, h->src, sizeof d->addr); -+ -+ /* don't change users' perspective */ -+ if (d->nopen && !(d->flags & DEVFL_PAUSE)) { - spin_unlock_irqrestore(&d->lock, flags); - return; - } -- -+ d->flags |= DEVFL_PAUSE; /* force pause */ - d->fw_ver = be16_to_cpu(ch->fwver); - -- /* we get here only if the device is new */ -- sl = aoecmd_ata_id(d); -+ /* check for already outstanding ataid */ -+ sl = aoedev_isbusy(d) == 0 ? aoecmd_ata_id(d) : NULL; - - spin_unlock_irqrestore(&d->lock, flags); - ---- gregkh-2.6.orig/drivers/block/aoe/aoedev.c -+++ gregkh-2.6/drivers/block/aoe/aoedev.c -@@ -12,6 +12,24 @@ - static struct aoedev *devlist; - static spinlock_t devlist_lock; - -+int -+aoedev_isbusy(struct aoedev *d) -+{ -+ struct frame *f, *e; -+ -+ f = d->frames; -+ e = f + d->nframes; -+ do { -+ if (f->tag != FREETAG) { -+ printk(KERN_DEBUG "aoe: %ld.%ld isbusy\n", -+ d->aoemajor, d->aoeminor); -+ return 1; -+ } -+ } while (++f < e); -+ -+ return 0; -+} -+ - struct aoedev * - aoedev_by_aoeaddr(int maj, int min) - { -@@ -28,6 +46,18 @@ aoedev_by_aoeaddr(int maj, int min) - return d; - } - -+static void -+dummy_timer(ulong vp) -+{ -+ struct aoedev *d; -+ -+ d = (struct aoedev *)vp; -+ if (d->flags & DEVFL_TKILL) -+ return; -+ d->timer.expires = jiffies + HZ; -+ add_timer(&d->timer); -+} -+ - /* called with devlist lock held */ - static struct aoedev * - aoedev_newdev(ulong nframes) -@@ -44,6 +74,8 @@ aoedev_newdev(ulong nframes) - return NULL; - } - -+ INIT_WORK(&d->work, aoecmd_sleepwork, d); -+ - d->nframes = nframes; - d->frames = f; - e = f + nframes; -@@ -52,6 +84,10 @@ aoedev_newdev(ulong nframes) - - spin_lock_init(&d->lock); - init_timer(&d->timer); -+ d->timer.data = (ulong) d; -+ d->timer.function = dummy_timer; -+ d->timer.expires = jiffies + HZ; -+ add_timer(&d->timer); - d->bufpool = NULL; /* defer to aoeblk_gdalloc */ - INIT_LIST_HEAD(&d->bufq); - d->next = devlist; -@@ -67,9 +103,6 @@ aoedev_downdev(struct aoedev *d) - struct buf *buf; - struct bio *bio; - -- d->flags |= DEVFL_TKILL; -- del_timer(&d->timer); -- - f = d->frames; - e = f + d->nframes; - for (; f<e; f->tag = FREETAG, f->buf = NULL, f++) { -@@ -92,16 +125,15 @@ aoedev_downdev(struct aoedev *d) - bio_endio(bio, bio->bi_size, -EIO); - } - -- if (d->nopen) -- d->flags |= DEVFL_CLOSEWAIT; - if (d->gd) - d->gd->capacity = 0; - -- d->flags &= ~DEVFL_UP; -+ d->flags &= ~(DEVFL_UP | DEVFL_PAUSE); - } - -+/* find it or malloc it */ - struct aoedev * --aoedev_set(ulong sysminor, unsigned char *addr, struct net_device *ifp, ulong bufcnt) -+aoedev_by_sysminor_m(ulong sysminor, ulong bufcnt) - { - struct aoedev *d; - ulong flags; -@@ -112,25 +144,19 @@ aoedev_set(ulong sysminor, unsigned char - if (d->sysminor == sysminor) - break; - -- if (d == NULL && (d = aoedev_newdev(bufcnt)) == NULL) { -- spin_unlock_irqrestore(&devlist_lock, flags); -- printk(KERN_INFO "aoe: aoedev_set: aoedev_newdev failure.\n"); -- return NULL; -- } /* if newdev, (d->flags & DEVFL_UP) == 0 for below */ -- -- spin_unlock_irqrestore(&devlist_lock, flags); -- spin_lock_irqsave(&d->lock, flags); -- -- d->ifp = ifp; -- memcpy(d->addr, addr, sizeof d->addr); -- if ((d->flags & DEVFL_UP) == 0) { -- aoedev_downdev(d); /* flushes outstanding frames */ -+ if (d == NULL) { -+ d = aoedev_newdev(bufcnt); -+ if (d == NULL) { -+ spin_unlock_irqrestore(&devlist_lock, flags); -+ printk(KERN_INFO "aoe: aoedev_set: aoedev_newdev failure.\n"); -+ return NULL; -+ } - d->sysminor = sysminor; - d->aoemajor = AOEMAJOR(sysminor); - d->aoeminor = AOEMINOR(sysminor); - } - -- spin_unlock_irqrestore(&d->lock, flags); -+ spin_unlock_irqrestore(&devlist_lock, flags); - return d; - } - -@@ -161,6 +187,7 @@ aoedev_exit(void) - - spin_lock_irqsave(&d->lock, flags); - aoedev_downdev(d); -+ d->flags |= DEVFL_TKILL; - spin_unlock_irqrestore(&d->lock, flags); - - del_timer_sync(&d->timer); diff --git a/driver/aoe-support-multiple-aoe-listeners.patch b/driver/aoe-support-multiple-aoe-listeners.patch deleted file mode 100644 index 9fd5a82d64854..0000000000000 --- a/driver/aoe-support-multiple-aoe-listeners.patch +++ /dev/null @@ -1,59 +0,0 @@ -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-device-information-on-last-close.patch b/driver/aoe-update-device-information-on-last-close.patch deleted file mode 100644 index bcfefe002c0cc..0000000000000 --- a/driver/aoe-update-device-information-on-last-close.patch +++ /dev/null @@ -1,29 +0,0 @@ -From ecashin@coraid.com Thu Jan 19 11:11:56 2006 -Message-ID: <6708136ac02e66a47b3c32b744cd5ca1@coraid.com> -From: "Ed L. Cashin" <ecashin@coraid.com> -Date: Thu, 19 Jan 2006 13:46:27 -0500 -CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> -Subject: [PATCH 2.6.15-git9] aoe [6/8]: update device information on last close - -Instead of making the user wait or do it manually, refresh -device information on its last close by issuing a config -query to the device. - -Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/block/aoe/aoeblk.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- gregkh-2.6.orig/drivers/block/aoe/aoeblk.c -+++ gregkh-2.6/drivers/block/aoe/aoeblk.c -@@ -109,7 +109,7 @@ aoeblk_release(struct inode *inode, stru - - spin_lock_irqsave(&d->lock, flags); - -- if (--d->nopen == 0 && !(d->flags & DEVFL_UP)) { -+ if (--d->nopen == 0) { - spin_unlock_irqrestore(&d->lock, flags); - aoecmd_cfg(d->aoemajor, d->aoeminor); - return 0; diff --git a/driver/aoe-update-driver-compatibility-string.patch b/driver/aoe-update-driver-compatibility-string.patch deleted file mode 100644 index b6aed810b1aff..0000000000000 --- a/driver/aoe-update-driver-compatibility-string.patch +++ /dev/null @@ -1,29 +0,0 @@ -From ecashin@coraid.com Thu Jan 19 11:11:56 2006 -Message-ID: <49d97c1e1c57eeb1017586aef4372f8c@coraid.com> -Date: Thu, 19 Jan 2006 13:46:29 -0500 -From: "Ed L. Cashin" <ecashin@coraid.com> -CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> -Subject: [PATCH 2.6.15-git9] aoe [7/8]: update driver compatibility string - -The aoe driver is not compatible with 2.6 kernels older -than 2.6.2. - -Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/block/aoe/aoemain.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- gregkh-2.6.orig/drivers/block/aoe/aoemain.c -+++ gregkh-2.6/drivers/block/aoe/aoemain.c -@@ -11,7 +11,7 @@ - - MODULE_LICENSE("GPL"); - MODULE_AUTHOR("Sam Hopkins <sah@coraid.com>"); --MODULE_DESCRIPTION("AoE block/char driver for 2.6.[0-9]+"); -+MODULE_DESCRIPTION("AoE block/char driver for 2.6.2 and newer 2.6 kernels"); - MODULE_VERSION(VERSION); - - enum { TINIT, TRUN, TKILL }; diff --git a/driver/aoe-update-driver-version-number.patch b/driver/aoe-update-driver-version-number.patch deleted file mode 100644 index 5cff551a48f22..0000000000000 --- a/driver/aoe-update-driver-version-number.patch +++ /dev/null @@ -1,26 +0,0 @@ -From ecashin@coraid.com Thu Jan 19 11:12:07 2006 -Message-ID: <50543c54f330f77d820ae494a4efcfb8@coraid.com> -Date: Thu, 19 Jan 2006 13:46:31 -0500 -From: "Ed L. Cashin" <ecashin@coraid.com> -CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> -Subject: [PATCH 2.6.15-git9] aoe [8/8]: update driver version number - -Update aoe driver version number. - -Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - 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 "14" -+#define VERSION "21" - #define AOE_MAJOR 152 - #define DEVICE_NAME "aoe" - diff --git a/driver/aoe-update-version-to-22.patch b/driver/aoe-update-version-to-22.patch deleted file mode 100644 index 41fa27d71e982..0000000000000 --- a/driver/aoe-update-version-to-22.patch +++ /dev/null @@ -1,24 +0,0 @@ -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/aoe-use-less-confusing-driver-name.patch b/driver/aoe-use-less-confusing-driver-name.patch deleted file mode 100644 index 126cb25ef06f5..0000000000000 --- a/driver/aoe-use-less-confusing-driver-name.patch +++ /dev/null @@ -1,29 +0,0 @@ -From ecashin@coraid.com Thu Jan 19 11:11:56 2006 -Message-ID: <7be904c15d72056646152df618e81904@coraid.com> -From: "Ed L. Cashin" <ecashin@coraid.com> -Date: Thu, 19 Jan 2006 13:46:22 -0500 -CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> -Subject: [PATCH 2.6.15-git9] aoe [4/8]: use less confusing driver name - -Users were confused by the driver being called "aoe-2.6-$version". -This form looks less like a Linux kernel version number. - -Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/block/aoe/aoemain.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- gregkh-2.6.orig/drivers/block/aoe/aoemain.c -+++ gregkh-2.6/drivers/block/aoe/aoemain.c -@@ -89,7 +89,7 @@ aoe_init(void) - } - - printk(KERN_INFO -- "aoe: aoe_init: AoE v2.6-%s initialised.\n", -+ "aoe: aoe_init: AoE v%s initialised.\n", - VERSION); - discover_timer(TINIT); - return 0; diff --git a/driver/aoe-zero-packet-data-after-skb-allocation.patch b/driver/aoe-zero-packet-data-after-skb-allocation.patch deleted file mode 100644 index 803d6b01711dc..0000000000000 --- a/driver/aoe-zero-packet-data-after-skb-allocation.patch +++ /dev/null @@ -1,27 +0,0 @@ -From ecashin@coraid.com Thu Jan 19 10:41:19 2006 -Message-ID: <1d5bd928255f552b12b1b329c92257bb@coraid.com> -From: "Ed L. Cashin" <ecashin@coraid.com> -Date: Thu, 19 Jan 2006 12:37:24 -0500 -CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> -Subject: [PATCH 2.6.15-git9] aoe [1/8]: zero packet data after skb allocation - -Zero the data in new socket buffers to prevent leaking information. - -Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/block/aoe/aoecmd.c | 1 + - 1 file changed, 1 insertion(+) - ---- gregkh-2.6.orig/drivers/block/aoe/aoecmd.c -+++ gregkh-2.6/drivers/block/aoe/aoecmd.c -@@ -28,6 +28,7 @@ new_skb(struct net_device *if_dev, ulong - skb->protocol = __constant_htons(ETH_P_AOE); - skb->priority = 0; - skb_put(skb, len); -+ memset(skb->head, 0, len); - skb->next = skb->prev = NULL; - - /* tell the network layer not to perform IP checksums diff --git a/driver/sysfs-crash-debugging.patch b/driver/sysfs-crash-debugging.patch index 540635c90260f..e061f5b2c7010 100644 --- a/driver/sysfs-crash-debugging.patch +++ b/driver/sysfs-crash-debugging.patch @@ -17,27 +17,25 @@ Signed-off-by: Adrian Bunk <bunk@stusta.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- - arch/i386/kernel/traps.c | 3 ++- + arch/i386/kernel/traps.c | 1 + arch/x86_64/kernel/traps.c | 1 + fs/sysfs/file.c | 14 ++++++++++++++ include/linux/sysfs.h | 6 ++++++ - 4 files changed, 23 insertions(+), 1 deletion(-) + 4 files changed, 22 insertions(+) --- gregkh-2.6.orig/arch/i386/kernel/traps.c +++ gregkh-2.6/arch/i386/kernel/traps.c -@@ -386,7 +386,8 @@ void die(const char * str, struct pt_reg +@@ -386,6 +386,7 @@ void die(const char * str, struct pt_reg #endif if (nl) printk("\n"); -- notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV); + sysfs_printk_last_file(); -+ notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV); - show_registers(regs); - } else - printk(KERN_EMERG "Recursive die() failure, output suppressed\n"); + if (notify_die(DIE_OOPS, str, regs, err, + current->thread.trap_no, SIGSEGV) != + NOTIFY_STOP) --- gregkh-2.6.orig/arch/x86_64/kernel/traps.c +++ gregkh-2.6/arch/x86_64/kernel/traps.c -@@ -428,6 +428,7 @@ void __kprobes __die(const char * str, s +@@ -427,6 +427,7 @@ void __kprobes __die(const char * str, s printk("DEBUG_PAGEALLOC"); #endif printk("\n"); |