Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=19900cdee29c812857ce938ab449e1053d516252
Commit:     19900cdee29c812857ce938ab449e1053d516252
Parent:     58637ec90b7ceed5909e726ac90118852f79d2b1
Author:     Ed L. Cashin <[EMAIL PROTECTED]>
AuthorDate: Fri Dec 22 01:09:21 2006 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Fri Dec 22 08:55:49 2006 -0800

    [PATCH] fix aoe without scatter-gather [Bug 7662]
    
    Fix a bug that only appears when AoE goes over a network card that does not
    support scatter-gather.  The headers in the linear part of the skb appeared
    to be larger than they really were, resulting in data that was offset by 24
    bytes.
    
    This patch eliminates the offset data on cards that don't support
    scatter-gather or have had scatter-gather turned off.  There remains an
    unrelated issue that I'll address in a separate email.
    
    Fixes bugzilla #7662
    
    Signed-off-by: "Ed L. Cashin" <[EMAIL PROTECTED]>
    Cc: <[EMAIL PROTECTED]>
    Cc: Greg KH <[EMAIL PROTECTED]>
    Cc: <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/block/aoe/aoecmd.c |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c
index 97f7f53..bb022ed 100644
--- a/drivers/block/aoe/aoecmd.c
+++ b/drivers/block/aoe/aoecmd.c
@@ -30,8 +30,6 @@ new_skb(ulong len)
                skb->nh.raw = skb->mac.raw = skb->data;
                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
@@ -122,8 +120,8 @@ aoecmd_ata_rw(struct aoedev *d, struct frame *f)
        skb = f->skb;
        h = (struct aoe_hdr *) skb->mac.raw;
        ah = (struct aoe_atahdr *) (h+1);
-       skb->len = sizeof *h + sizeof *ah;
-       memset(h, 0, ETH_ZLEN);
+       skb_put(skb, sizeof *h + sizeof *ah);
+       memset(h, 0, skb->len);
        f->tag = aoehdr_atainit(d, h);
        f->waited = 0;
        f->buf = buf;
@@ -149,7 +147,6 @@ aoecmd_ata_rw(struct aoedev *d, struct frame *f)
                skb->len += bcnt;
                skb->data_len = bcnt;
        } else {
-               skb->len = ETH_ZLEN;
                writebit = 0;
        }
 
@@ -206,6 +203,7 @@ aoecmd_cfg_pkts(ushort aoemajor, unsigned char aoeminor, 
struct sk_buff **tail)
                        printk(KERN_INFO "aoe: skb alloc failure\n");
                        continue;
                }
+               skb_put(skb, sizeof *h + sizeof *ch);
                skb->dev = ifp;
                if (sl_tail == NULL)
                        sl_tail = skb;
@@ -243,6 +241,7 @@ freeframe(struct aoedev *d)
                        continue;
                if (atomic_read(&skb_shinfo(f->skb)->dataref) == 1) {
                        skb_shinfo(f->skb)->nr_frags = f->skb->data_len = 0;
+                       skb_trim(f->skb, 0);
                        return f;
                }
                n++;
@@ -698,8 +697,8 @@ aoecmd_ata_id(struct aoedev *d)
        skb = f->skb;
        h = (struct aoe_hdr *) skb->mac.raw;
        ah = (struct aoe_atahdr *) (h+1);
-       skb->len = ETH_ZLEN;
-       memset(h, 0, ETH_ZLEN);
+       skb_put(skb, sizeof *h + sizeof *ah);
+       memset(h, 0, skb->len);
        f->tag = aoehdr_atainit(d, h);
        f->waited = 0;
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to