diff -ruN aoe-2.6-12-coraid/linux/drivers/block/aoe/aoecmd.c aoe-2.6-12/linux/drivers/block/aoe/aoecmd.c
--- aoe-2.6-12-coraid/linux/drivers/block/aoe/aoecmd.c	2005-08-22 22:32:18.000000000 +0400
+++ aoe-2.6-12/linux/drivers/block/aoe/aoecmd.c	2005-11-14 14:23:03.000000000 +0300
@@ -122,8 +122,8 @@
 
 	sector = buf->sector;
 	bcnt = buf->bv_resid;
-	if (bcnt > MAXATADATA)
-		bcnt = MAXATADATA;
+	if (bcnt > d->maxdata)
+		bcnt = d->maxdata;
 
 	/* initialize the headers & frame */
 	h = (struct aoe_hdr *) f->data;
@@ -594,7 +594,7 @@
 	ulong flags, sysminor, aoemajor;
 	u16 bufcnt;
 	struct sk_buff *sl;
-	enum { MAXFRAMES = 8 };
+	enum { MAXFRAMES = 64 };
 
 	h = (struct aoe_hdr *) skb->mac.raw;
 	ch = (struct aoe_cfghdr *) (h+1);
@@ -622,7 +622,7 @@
 	if (bufcnt > MAXFRAMES)	/* keep it reasonable */
 		bufcnt = MAXFRAMES;
 
-	d = aoedev_set(sysminor, h->src, skb->dev, bufcnt);
+	d = aoedev_set(sysminor, h->src, skb->dev, bufcnt, ch->res);
 	if (d == NULL) {
 		printk(KERN_INFO "aoe: aoecmd_cfg_rsp: device set failure\n");
 		return;
diff -ruN aoe-2.6-12-coraid/linux/drivers/block/aoe/aoedev.c aoe-2.6-12/linux/drivers/block/aoe/aoedev.c
--- aoe-2.6-12-coraid/linux/drivers/block/aoe/aoedev.c	2005-08-22 22:32:18.000000000 +0400
+++ aoe-2.6-12/linux/drivers/block/aoe/aoedev.c	2005-11-14 14:20:14.000000000 +0300
@@ -101,7 +101,7 @@
 }
 
 struct aoedev *
-aoedev_set(ulong sysminor, unsigned char *addr, struct net_device *ifp, ulong bufcnt)
+aoedev_set(ulong sysminor, unsigned char *addr, struct net_device *ifp, ulong bufcnt, ulong seccnt)
 {
 	struct aoedev *d;
 	ulong flags;
@@ -118,6 +118,15 @@
 		return NULL;
 	} /* if newdev, (d->flags & DEVFL_UP) == 0 for below */
 
+	if (seccnt) {
+		d->maxdata = seccnt;
+		seccnt = (ifp->mtu - (sizeof(struct aoe_hdr) + sizeof(struct aoe_atahdr))) >> 9;
+		if (d->maxdata > seccnt)
+			d->maxdata = seccnt;
+		d->maxdata <<= 9;
+	} else
+		d->maxdata = MAXATADATA;
+
 	spin_unlock_irqrestore(&devlist_lock, flags);
 	spin_lock_irqsave(&d->lock, flags);
 
diff -ruN aoe-2.6-12-coraid/linux/drivers/block/aoe/aoe.h aoe-2.6-12/linux/drivers/block/aoe/aoe.h
--- aoe-2.6-12-coraid/linux/drivers/block/aoe/aoe.h	2005-08-22 22:32:18.000000000 +0400
+++ aoe-2.6-12/linux/drivers/block/aoe/aoe.h	2005-11-14 14:16:44.000000000 +0300
@@ -121,6 +121,7 @@
 	ulong sysminor;
 	ulong aoemajor;
 	ulong aoeminor;
+	int maxdata;
 	ulong nopen;		/* (bd_openers isn't available without sleeping) */
 	ulong rttavg;		/* round trip average of requests/responses */
 	u16 fw_ver;		/* version of blade's firmware */
@@ -161,7 +162,7 @@
 void aoedev_exit(void);
 struct aoedev *aoedev_by_aoeaddr(int maj, int min);
 void aoedev_downdev(struct aoedev *d);
-struct aoedev *aoedev_set(ulong, unsigned char *, struct net_device *, ulong);
+struct aoedev *aoedev_set(ulong, unsigned char *, struct net_device *, ulong, ulong);
 int aoedev_busy(void);
 
 int aoenet_init(void);
