diff options
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/aoe/aoecmd.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c index 63c456082d81..621fdbbc4cd4 100644 --- a/drivers/block/aoe/aoecmd.c +++ b/drivers/block/aoe/aoecmd.c | |||
@@ -475,7 +475,7 @@ void | |||
475 | aoecmd_ata_rsp(struct sk_buff *skb) | 475 | aoecmd_ata_rsp(struct sk_buff *skb) |
476 | { | 476 | { |
477 | struct aoedev *d; | 477 | struct aoedev *d; |
478 | struct aoe_hdr *hin; | 478 | struct aoe_hdr *hin, *hout; |
479 | struct aoe_atahdr *ahin, *ahout; | 479 | struct aoe_atahdr *ahin, *ahout; |
480 | struct frame *f; | 480 | struct frame *f; |
481 | struct buf *buf; | 481 | struct buf *buf; |
@@ -515,7 +515,8 @@ aoecmd_ata_rsp(struct sk_buff *skb) | |||
515 | calc_rttavg(d, tsince(f->tag)); | 515 | calc_rttavg(d, tsince(f->tag)); |
516 | 516 | ||
517 | ahin = (struct aoe_atahdr *) (hin+1); | 517 | ahin = (struct aoe_atahdr *) (hin+1); |
518 | ahout = (struct aoe_atahdr *) (f->skb->mac.raw + sizeof(struct aoe_hdr)); | 518 | hout = (struct aoe_hdr *) f->skb->mac.raw; |
519 | ahout = (struct aoe_atahdr *) (hout+1); | ||
519 | buf = f->buf; | 520 | buf = f->buf; |
520 | 521 | ||
521 | if (ahout->cmdstat == WIN_IDENTIFY) | 522 | if (ahout->cmdstat == WIN_IDENTIFY) |
@@ -552,6 +553,9 @@ aoecmd_ata_rsp(struct sk_buff *skb) | |||
552 | skb_fill_page_desc(f->skb, 0, | 553 | skb_fill_page_desc(f->skb, 0, |
553 | virt_to_page(f->bufaddr), | 554 | virt_to_page(f->bufaddr), |
554 | offset_in_page(f->bufaddr), n); | 555 | offset_in_page(f->bufaddr), n); |
556 | f->tag = newtag(d); | ||
557 | hout->tag = cpu_to_be32(f->tag); | ||
558 | skb->dev = d->ifp; | ||
555 | skb_get(f->skb); | 559 | skb_get(f->skb); |
556 | f->skb->next = NULL; | 560 | f->skb->next = NULL; |
557 | spin_unlock_irqrestore(&d->lock, flags); | 561 | spin_unlock_irqrestore(&d->lock, flags); |