diff options
Diffstat (limited to 'drivers/block/aoe/aoecmd.c')
-rw-r--r-- | 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 97f7f535f412..bb022ed4a866 100644 --- a/drivers/block/aoe/aoecmd.c +++ b/drivers/block/aoe/aoecmd.c | |||
@@ -30,8 +30,6 @@ new_skb(ulong len) | |||
30 | skb->nh.raw = skb->mac.raw = skb->data; | 30 | skb->nh.raw = skb->mac.raw = skb->data; |
31 | skb->protocol = __constant_htons(ETH_P_AOE); | 31 | skb->protocol = __constant_htons(ETH_P_AOE); |
32 | skb->priority = 0; | 32 | skb->priority = 0; |
33 | skb_put(skb, len); | ||
34 | memset(skb->head, 0, len); | ||
35 | skb->next = skb->prev = NULL; | 33 | skb->next = skb->prev = NULL; |
36 | 34 | ||
37 | /* tell the network layer not to perform IP checksums | 35 | /* tell the network layer not to perform IP checksums |
@@ -122,8 +120,8 @@ aoecmd_ata_rw(struct aoedev *d, struct frame *f) | |||
122 | skb = f->skb; | 120 | skb = f->skb; |
123 | h = (struct aoe_hdr *) skb->mac.raw; | 121 | h = (struct aoe_hdr *) skb->mac.raw; |
124 | ah = (struct aoe_atahdr *) (h+1); | 122 | ah = (struct aoe_atahdr *) (h+1); |
125 | skb->len = sizeof *h + sizeof *ah; | 123 | skb_put(skb, sizeof *h + sizeof *ah); |
126 | memset(h, 0, ETH_ZLEN); | 124 | memset(h, 0, skb->len); |
127 | f->tag = aoehdr_atainit(d, h); | 125 | f->tag = aoehdr_atainit(d, h); |
128 | f->waited = 0; | 126 | f->waited = 0; |
129 | f->buf = buf; | 127 | f->buf = buf; |
@@ -149,7 +147,6 @@ aoecmd_ata_rw(struct aoedev *d, struct frame *f) | |||
149 | skb->len += bcnt; | 147 | skb->len += bcnt; |
150 | skb->data_len = bcnt; | 148 | skb->data_len = bcnt; |
151 | } else { | 149 | } else { |
152 | skb->len = ETH_ZLEN; | ||
153 | writebit = 0; | 150 | writebit = 0; |
154 | } | 151 | } |
155 | 152 | ||
@@ -206,6 +203,7 @@ aoecmd_cfg_pkts(ushort aoemajor, unsigned char aoeminor, struct sk_buff **tail) | |||
206 | printk(KERN_INFO "aoe: skb alloc failure\n"); | 203 | printk(KERN_INFO "aoe: skb alloc failure\n"); |
207 | continue; | 204 | continue; |
208 | } | 205 | } |
206 | skb_put(skb, sizeof *h + sizeof *ch); | ||
209 | skb->dev = ifp; | 207 | skb->dev = ifp; |
210 | if (sl_tail == NULL) | 208 | if (sl_tail == NULL) |
211 | sl_tail = skb; | 209 | sl_tail = skb; |
@@ -243,6 +241,7 @@ freeframe(struct aoedev *d) | |||
243 | continue; | 241 | continue; |
244 | if (atomic_read(&skb_shinfo(f->skb)->dataref) == 1) { | 242 | if (atomic_read(&skb_shinfo(f->skb)->dataref) == 1) { |
245 | skb_shinfo(f->skb)->nr_frags = f->skb->data_len = 0; | 243 | skb_shinfo(f->skb)->nr_frags = f->skb->data_len = 0; |
244 | skb_trim(f->skb, 0); | ||
246 | return f; | 245 | return f; |
247 | } | 246 | } |
248 | n++; | 247 | n++; |
@@ -698,8 +697,8 @@ aoecmd_ata_id(struct aoedev *d) | |||
698 | skb = f->skb; | 697 | skb = f->skb; |
699 | h = (struct aoe_hdr *) skb->mac.raw; | 698 | h = (struct aoe_hdr *) skb->mac.raw; |
700 | ah = (struct aoe_atahdr *) (h+1); | 699 | ah = (struct aoe_atahdr *) (h+1); |
701 | skb->len = ETH_ZLEN; | 700 | skb_put(skb, sizeof *h + sizeof *ah); |
702 | memset(h, 0, ETH_ZLEN); | 701 | memset(h, 0, skb->len); |
703 | f->tag = aoehdr_atainit(d, h); | 702 | f->tag = aoehdr_atainit(d, h); |
704 | f->waited = 0; | 703 | f->waited = 0; |
705 | 704 | ||