aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-03-27 09:47:21 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2006-03-27 09:47:21 -0800
commit457819ce81f7049f37509c4a2d7be9f16fea73a6 (patch)
treea9f1d3fb80e78928d18332304de8eb274a293935 /driver
parent949d096d0e2c09f95d29033a3058e2f7aa0780c4 (diff)
downloadpatches-457819ce81f7049f37509c4a2d7be9f16fea73a6.tar.gz
2.6.16-git13 refresh
Diffstat (limited to 'driver')
-rw-r--r--driver/aoe-allow-network-interface-migration-on-packet-retransmit.patch26
-rw-r--r--driver/aoe-do-not-stop-retransmit-timer-when-device-goes-down.patch38
-rw-r--r--driver/aoe-don-t-request-ata-device-id-on-ata-error.patch36
-rw-r--r--driver/aoe-increase-allowed-outstanding-packets.patch28
-rw-r--r--driver/aoe-support-dynamic-resizing-of-aoe-devices.patch641
-rw-r--r--driver/aoe-support-multiple-aoe-listeners.patch59
-rw-r--r--driver/aoe-update-device-information-on-last-close.patch29
-rw-r--r--driver/aoe-update-driver-compatibility-string.patch29
-rw-r--r--driver/aoe-update-driver-version-number.patch26
-rw-r--r--driver/aoe-update-version-to-22.patch24
-rw-r--r--driver/aoe-use-less-confusing-driver-name.patch29
-rw-r--r--driver/aoe-zero-packet-data-after-skb-allocation.patch27
-rw-r--r--driver/sysfs-crash-debugging.patch16
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");