diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-01-10 12:01:10 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-01-10 12:01:10 -0800 |
commit | 3871c527fe1cef5a8a6a5cd4613e0f583307a4dc (patch) | |
tree | 6a78e052b29a2029ed37c9418a2e4c575687137e /driver | |
parent | 9ea31ab14e75cd05e8377979768d95eb036c8aaa (diff) | |
download | patches-3871c527fe1cef5a8a6a5cd4613e0f583307a4dc.tar.gz |
lots of new patches all over the place
Diffstat (limited to 'driver')
8 files changed, 718 insertions, 0 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 new file mode 100644 index 0000000000000..d805fd0501ab7 --- /dev/null +++ b/driver/aoe-allow-network-interface-migration-on-packet-retransmit.patch @@ -0,0 +1,28 @@ +From ecashin@coraid.com Tue Jan 3 13:31:30 2006 +From: "Ed L. Cashin" <ecashin@coraid.com> +CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> +Subject: aoe: allow network interface migration on packet retransmit +Date: Tue, 03 Jan 2006 16:08:17 -0500 +Message-ID: <87sls5yq7y.fsf@coraid.com> + + +Retransmit to the current network interface for an AoE device. + +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, 2 insertions(+) + +--- gregkh-2.6.orig/drivers/block/aoe/aoecmd.c ++++ gregkh-2.6/drivers/block/aoe/aoecmd.c +@@ -239,6 +239,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-increase-allowed-outstanding-packets.patch b/driver/aoe-increase-allowed-outstanding-packets.patch new file mode 100644 index 0000000000000..93a985ea0195f --- /dev/null +++ b/driver/aoe-increase-allowed-outstanding-packets.patch @@ -0,0 +1,28 @@ +From ecashin@coraid.com Tue Jan 3 13:31:24 2006 +From: "Ed L. Cashin" <ecashin@coraid.com> +CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> +Subject: aoe: increase allowed outstanding packets +Date: Tue, 03 Jan 2006 16:07:55 -0500 +Message-ID: <87aced10lw.fsf@coraid.com> + +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 +@@ -655,7 +655,7 @@ aoecmd_cfg_rsp(struct sk_buff *skb) + unsigned long 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 new file mode 100644 index 0000000000000..eb76a43287717 --- /dev/null +++ b/driver/aoe-support-dynamic-resizing-of-aoe-devices.patch @@ -0,0 +1,524 @@ +From ecashin@coraid.com Tue Jan 3 13:19:50 2006 +From: "Ed L. Cashin" <ecashin@coraid.com> +CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> +Subject: aoe: support dynamic resizing of AoE devices +Date: Tue, 03 Jan 2006 16:07:41 -0500 +Message-ID: <87irt110ma.fsf@coraid.com> + +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 | 13 +++-- + drivers/block/aoe/aoeblk.c | 22 +++----- + drivers/block/aoe/aoechr.c | 37 ++++++++++++++ + drivers/block/aoe/aoecmd.c | 113 +++++++++++++++++++++++++++++++++++--------- + drivers/block/aoe/aoedev.c | 50 ++++++++++++------- + 7 files changed, 179 insertions(+), 59 deletions(-) + +--- 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/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/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) + { +@@ -44,6 +62,8 @@ aoedev_newdev(unsigned long nframes) + return NULL; + } + ++ INIT_WORK(&d->work, aoecmd_sleepwork, d); ++ + d->nframes = nframes; + d->frames = f; + e = f + nframes; +@@ -92,17 +112,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(unsigned long sysminor, unsigned char *addr, +- struct net_device *ifp, unsigned long bufcnt) ++aoedev_by_sysminor_m(ulong sysminor, ulong bufcnt) + { + struct aoedev *d; + unsigned long flags; +@@ -113,25 +131,19 @@ aoedev_set(unsigned long sysminor, unsig + 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; + } + +--- 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/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" + +@@ -195,6 +196,14 @@ 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 +315,38 @@ 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); ++//?? rescan_partitions(d->gd, bd); ++ 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 +381,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 +501,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,24 +534,25 @@ 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) ++/* some callers cannot sleep, and they can call this function, ++ * transmitting the packets later, when interrupts are on ++ */ ++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; ++ struct sk_buff *skb, *sl, *sl_tail; + struct net_device *ifp; + +- sl = NULL; ++ sl = sl_tail = NULL; + + read_lock(&dev_base_lock); + for (ifp = dev_base; ifp; dev_put(ifp), ifp = ifp->next) { +@@ -515,6 +565,8 @@ aoecmd_cfg(ushort aoemajor, unsigned cha + 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); + +@@ -531,6 +583,18 @@ aoecmd_cfg(ushort aoemajor, unsigned cha + } + read_unlock(&dev_base_lock); + ++ if (tail != NULL) ++ *tail = sl_tail; ++ return sl; ++} ++ ++void ++aoecmd_cfg(ushort aoemajor, unsigned char aoeminor) ++{ ++ struct sk_buff *sl; ++ ++ sl = aoecmd_cfg_pkts(aoemajor, aoeminor, NULL); ++ + aoenet_xmit(sl); + } + +@@ -619,23 +683,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/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,18 @@ 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); ++struct sk_buff *aoecmd_cfg_pkts(ushort, unsigned char, struct sk_buff **); + 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(unsigned long, unsigned char *, struct net_device *, unsigned long); +-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/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; diff --git a/driver/aoe-update-device-information-on-last-close.patch b/driver/aoe-update-device-information-on-last-close.patch new file mode 100644 index 0000000000000..4d795dd1b7506 --- /dev/null +++ b/driver/aoe-update-device-information-on-last-close.patch @@ -0,0 +1,29 @@ +From ecashin@coraid.com Tue Jan 3 13:31:33 2006 +From: "Ed L. Cashin" <ecashin@coraid.com> +CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> +Subject: aoe: update device information on last close +Date: Tue, 03 Jan 2006 16:08:25 -0500 +Message-ID: <87k6dhyq7q.fsf@coraid.com> + +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-version-number.patch b/driver/aoe-update-driver-version-number.patch new file mode 100644 index 0000000000000..b812df8f61368 --- /dev/null +++ b/driver/aoe-update-driver-version-number.patch @@ -0,0 +1,25 @@ +From ecashin@coraid.com Tue Jan 3 13:31:36 2006 +From: "Ed L. Cashin" <ecashin@coraid.com> +CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> +Subject: aoe: update driver version number +Date: Tue, 03 Jan 2006 16:08:33 -0500 +Message-ID: <87bqytyq7i.fsf@coraid.com> + +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 "18" + #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 new file mode 100644 index 0000000000000..79634c89d2636 --- /dev/null +++ b/driver/aoe-use-less-confusing-driver-name.patch @@ -0,0 +1,29 @@ +From ecashin@coraid.com Thu Jan 5 08:42:05 2006 +From: Ed L Cashin <ecashin@coraid.com> +To: Coywolf Qi Hunt <coywolf@gmail.com> +Cc: Greg K-H <greg@kroah.com> +Subject: aoe: use less confusing driver name +Date: Thu, 05 Jan 2006 11:35:29 -0500 +Message-ID: <87hd8i63am.fsf@coraid.com> + +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 new file mode 100644 index 0000000000000..cf678ed83ec5c --- /dev/null +++ b/driver/aoe-zero-packet-data-after-skb-allocation.patch @@ -0,0 +1,26 @@ +From ecashin@coraid.com Tue Jan 3 13:31:21 2006 +From: "Ed L. Cashin" <ecashin@coraid.com> +CC: ecashin@coraid.com, Greg K-H <greg@kroah.com> +Subject: aoe: zero packet data after skb allocation +Date: Tue, 03 Jan 2006 16:05:03 -0500 +Message-ID: <87hd8l2fb4.fsf@coraid.com> + +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, unsig + 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/platform-device-del-typo-fix.patch b/driver/platform-device-del-typo-fix.patch new file mode 100644 index 0000000000000..13deeeb399355 --- /dev/null +++ b/driver/platform-device-del-typo-fix.patch @@ -0,0 +1,29 @@ +From khali@linux-fr.org Thu Dec 29 09:40:13 2005 +Date: Tue, 27 Dec 2005 19:45:58 +0100 +From: Jean Delvare <khali@linux-fr.org> +To: Greg KH <greg@kroah.com> +Cc: Dmitry Torokhov <dtor_core@ameritech.net> +Subject: platform-device-del typo fix +Message-Id: <20051227194558.0db326e3.khali@linux-fr.org> + +Please fold this typo fix into platform-device-del.patch, as was +discussed earlier on LKML: + http://lkml.org/lkml/2005/12/10/76 + +Signed-off-by: Jean Delvare <khali@linux-fr.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> +--- + drivers/base/platform.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- gregkh-2.6.orig/drivers/base/platform.c ++++ gregkh-2.6/drivers/base/platform.c +@@ -327,7 +327,7 @@ EXPORT_SYMBOL_GPL(platform_device_regist + * @pdev: platform device we're unregistering + * + * Unregistration is done in 2 steps. Fisrt we release all resources +- * and remove it from the sybsystem, then we drop reference count by ++ * and remove it from the subsystem, then we drop reference count by + * calling platform_device_put(). + */ + void platform_device_unregister(struct platform_device * pdev) |