[AOE]: Add get_unaligned() calls where needed.

Based upon a report by Andrew Walrond.

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2007-03-01 18:30:08 -08:00 committed by David S. Miller
parent 7ab876703d
commit 43ecf5295b
2 changed files with 9 additions and 8 deletions

View File

@ -530,7 +530,7 @@ aoecmd_ata_rsp(struct sk_buff *skb)
u16 aoemajor; u16 aoemajor;
hin = (struct aoe_hdr *) skb->mac.raw; hin = (struct aoe_hdr *) skb->mac.raw;
aoemajor = be16_to_cpu(hin->major); aoemajor = be16_to_cpu(get_unaligned(&hin->major));
d = aoedev_by_aoeaddr(aoemajor, hin->minor); d = aoedev_by_aoeaddr(aoemajor, hin->minor);
if (d == NULL) { if (d == NULL) {
snprintf(ebuf, sizeof ebuf, "aoecmd_ata_rsp: ata response " snprintf(ebuf, sizeof ebuf, "aoecmd_ata_rsp: ata response "
@ -542,7 +542,7 @@ aoecmd_ata_rsp(struct sk_buff *skb)
spin_lock_irqsave(&d->lock, flags); spin_lock_irqsave(&d->lock, flags);
n = be32_to_cpu(hin->tag); n = be32_to_cpu(get_unaligned(&hin->tag));
f = getframe(d, n); f = getframe(d, n);
if (f == NULL) { if (f == NULL) {
calc_rttavg(d, -tsince(n)); calc_rttavg(d, -tsince(n));
@ -550,9 +550,9 @@ aoecmd_ata_rsp(struct sk_buff *skb)
snprintf(ebuf, sizeof ebuf, snprintf(ebuf, sizeof ebuf,
"%15s e%d.%d tag=%08x@%08lx\n", "%15s e%d.%d tag=%08x@%08lx\n",
"unexpected rsp", "unexpected rsp",
be16_to_cpu(hin->major), be16_to_cpu(get_unaligned(&hin->major)),
hin->minor, hin->minor,
be32_to_cpu(hin->tag), be32_to_cpu(get_unaligned(&hin->tag)),
jiffies); jiffies);
aoechr_error(ebuf); aoechr_error(ebuf);
return; return;
@ -631,7 +631,7 @@ aoecmd_ata_rsp(struct sk_buff *skb)
printk(KERN_INFO printk(KERN_INFO
"aoe: unrecognized ata command %2.2Xh for %d.%d\n", "aoe: unrecognized ata command %2.2Xh for %d.%d\n",
ahout->cmdstat, ahout->cmdstat,
be16_to_cpu(hin->major), be16_to_cpu(get_unaligned(&hin->major)),
hin->minor); hin->minor);
} }
} }
@ -733,7 +733,7 @@ aoecmd_cfg_rsp(struct sk_buff *skb)
* Enough people have their dip switches set backwards to * Enough people have their dip switches set backwards to
* warrant a loud message for this special case. * warrant a loud message for this special case.
*/ */
aoemajor = be16_to_cpu(h->major); aoemajor = be16_to_cpu(get_unaligned(&h->major));
if (aoemajor == 0xfff) { if (aoemajor == 0xfff) {
printk(KERN_ERR "aoe: Warning: shelf address is all ones. " printk(KERN_ERR "aoe: Warning: shelf address is all ones. "
"Check shelf dip switches.\n"); "Check shelf dip switches.\n");

View File

@ -8,6 +8,7 @@
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <asm/unaligned.h>
#include "aoe.h" #include "aoe.h"
#define NECODES 5 #define NECODES 5
@ -123,7 +124,7 @@ aoenet_rcv(struct sk_buff *skb, struct net_device *ifp, struct packet_type *pt,
skb_push(skb, ETH_HLEN); /* (1) */ skb_push(skb, ETH_HLEN); /* (1) */
h = (struct aoe_hdr *) skb->mac.raw; h = (struct aoe_hdr *) skb->mac.raw;
n = be32_to_cpu(h->tag); n = be32_to_cpu(get_unaligned(&h->tag));
if ((h->verfl & AOEFL_RSP) == 0 || (n & 1<<31)) if ((h->verfl & AOEFL_RSP) == 0 || (n & 1<<31))
goto exit; goto exit;
@ -133,7 +134,7 @@ aoenet_rcv(struct sk_buff *skb, struct net_device *ifp, struct packet_type *pt,
n = 0; n = 0;
if (net_ratelimit()) if (net_ratelimit())
printk(KERN_ERR "aoe: error packet from %d.%d; ecode=%d '%s'\n", printk(KERN_ERR "aoe: error packet from %d.%d; ecode=%d '%s'\n",
be16_to_cpu(h->major), h->minor, be16_to_cpu(get_unaligned(&h->major)), h->minor,
h->err, aoe_errlist[n]); h->err, aoe_errlist[n]);
goto exit; goto exit;
} }