git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git]
/
net
/
decnet
/
dn_route.c
diff --git
a/net/decnet/dn_route.c
b/net/decnet/dn_route.c
index
5abf705
..
3407f19
100644
(file)
--- a/
net/decnet/dn_route.c
+++ b/
net/decnet/dn_route.c
@@
-133,9
+133,9
@@
static struct dst_ops dn_dst_ops = {
.entries = ATOMIC_INIT(0),
};
.entries = ATOMIC_INIT(0),
};
-static __inline__ unsigned dn_hash(
__le16 src, __le16
dst)
+static __inline__ unsigned dn_hash(
unsigned short src, unsigned short
dst)
{
{
-
__u16 tmp = (__u16 __force)(src ^ dst)
;
+
unsigned short tmp = src ^ dst
;
tmp ^= (tmp >> 3);
tmp ^= (tmp >> 5);
tmp ^= (tmp >> 10);
tmp ^= (tmp >> 3);
tmp ^= (tmp >> 5);
tmp ^= (tmp >> 10);
@@
-149,7
+149,8
@@
static inline void dnrt_free(struct dn_route *rt)
static inline void dnrt_drop(struct dn_route *rt)
{
static inline void dnrt_drop(struct dn_route *rt)
{
- dst_release(&rt->u.dst);
+ if (rt)
+ dst_release(&rt->u.dst);
call_rcu_bh(&rt->u.dst.rcu_head, dst_rcu_free);
}
call_rcu_bh(&rt->u.dst.rcu_head, dst_rcu_free);
}
@@
-378,9
+379,9
@@
static int dn_return_short(struct sk_buff *skb)
{
struct dn_skb_cb *cb;
unsigned char *ptr;
{
struct dn_skb_cb *cb;
unsigned char *ptr;
-
__le16
*src;
-
__le16
*dst;
-
__le16
tmp;
+
dn_address
*src;
+
dn_address
*dst;
+
dn_address
tmp;
/* Add back headers */
skb_push(skb, skb->data - skb->nh.raw);
/* Add back headers */
skb_push(skb, skb->data - skb->nh.raw);
@@
-393,9
+394,9
@@
static int dn_return_short(struct sk_buff *skb)
ptr = skb->data + 2;
*ptr++ = (cb->rt_flags & ~DN_RT_F_RQR) | DN_RT_F_RTS;
ptr = skb->data + 2;
*ptr++ = (cb->rt_flags & ~DN_RT_F_RQR) | DN_RT_F_RTS;
- dst = (
__le16
*)ptr;
+ dst = (
dn_address
*)ptr;
ptr += 2;
ptr += 2;
- src = (
__le16
*)ptr;
+ src = (
dn_address
*)ptr;
ptr += 2;
*ptr = 0; /* Zero hop count */
ptr += 2;
*ptr = 0; /* Zero hop count */
@@
-474,8
+475,7
@@
static int dn_route_rx_packet(struct sk_buff *skb)
struct dn_skb_cb *cb = DN_SKB_CB(skb);
printk(KERN_DEBUG
"DECnet: dn_route_rx_packet: rt_flags=0x%02x dev=%s len=%d src=0x%04hx dst=0x%04hx err=%d type=%d\n",
struct dn_skb_cb *cb = DN_SKB_CB(skb);
printk(KERN_DEBUG
"DECnet: dn_route_rx_packet: rt_flags=0x%02x dev=%s len=%d src=0x%04hx dst=0x%04hx err=%d type=%d\n",
- (int)cb->rt_flags, devname, skb->len,
- dn_ntohs(cb->src), dn_ntohs(cb->dst),
+ (int)cb->rt_flags, devname, skb->len, cb->src, cb->dst,
err, skb->pkt_type);
}
err, skb->pkt_type);
}
@@
-505,7
+505,7
@@
static int dn_route_rx_long(struct sk_buff *skb)
/* Destination info */
ptr += 2;
/* Destination info */
ptr += 2;
- cb->dst = dn_
eth2dn(ptr
);
+ cb->dst = dn_
htons(dn_eth2dn(ptr)
);
if (memcmp(ptr, dn_hiord_addr, 4) != 0)
goto drop_it;
ptr += 6;
if (memcmp(ptr, dn_hiord_addr, 4) != 0)
goto drop_it;
ptr += 6;
@@
-513,7
+513,7
@@
static int dn_route_rx_long(struct sk_buff *skb)
/* Source info */
ptr += 2;
/* Source info */
ptr += 2;
- cb->src = dn_
eth2dn(ptr
);
+ cb->src = dn_
htons(dn_eth2dn(ptr)
);
if (memcmp(ptr, dn_hiord_addr, 4) != 0)
goto drop_it;
ptr += 6;
if (memcmp(ptr, dn_hiord_addr, 4) != 0)
goto drop_it;
ptr += 6;
@@
-541,9
+541,9
@@
static int dn_route_rx_short(struct sk_buff *skb)
skb_pull(skb, 5);
skb->h.raw = skb->data;
skb_pull(skb, 5);
skb->h.raw = skb->data;
- cb->dst = *(
__le16
*)ptr;
+ cb->dst = *(
dn_address
*)ptr;
ptr += 2;
ptr += 2;
- cb->src = *(
__le16
*)ptr;
+ cb->src = *(
dn_address
*)ptr;
ptr += 2;
cb->hops = *ptr & 0x3f;
ptr += 2;
cb->hops = *ptr & 0x3f;
@@
-575,7
+575,7
@@
int dn_route_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type
{
struct dn_skb_cb *cb;
unsigned char flags = 0;
{
struct dn_skb_cb *cb;
unsigned char flags = 0;
- __u16 len = dn_ntohs(*(__
le
16 *)skb->data);
+ __u16 len = dn_ntohs(*(__
u
16 *)skb->data);
struct dn_dev *dn = (struct dn_dev *)dev->dn_ptr;
unsigned char padlen = 0;
struct dn_dev *dn = (struct dn_dev *)dev->dn_ptr;
unsigned char padlen = 0;
@@
-629,7
+629,8
@@
int dn_route_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type
padlen);
if (flags & DN_RT_PKT_CNTL) {
padlen);
if (flags & DN_RT_PKT_CNTL) {
- if (unlikely(skb_linearize(skb)))
+ if (unlikely(skb_is_nonlinear(skb)) &&
+ skb_linearize(skb, GFP_ATOMIC) != 0)
goto dump_it;
switch(flags & DN_RT_CNTL_MSK) {
goto dump_it;
switch(flags & DN_RT_CNTL_MSK) {
@@
-781,7
+782,7
@@
static int dn_rt_bug(struct sk_buff *skb)
struct dn_skb_cb *cb = DN_SKB_CB(skb);
printk(KERN_DEBUG "dn_rt_bug: skb from:%04x to:%04x\n",
struct dn_skb_cb *cb = DN_SKB_CB(skb);
printk(KERN_DEBUG "dn_rt_bug: skb from:%04x to:%04x\n",
-
dn_ntohs(cb->src), dn_ntohs(cb->dst)
);
+
cb->src, cb->dst
);
}
kfree_skb(skb);
}
kfree_skb(skb);
@@
-822,7
+823,7
@@
static int dn_rt_set_next_hop(struct dn_route *rt, struct dn_fib_res *res)
return 0;
}
return 0;
}
-static inline int dn_match_addr(__
le16 addr1, __le
16 addr2)
+static inline int dn_match_addr(__
u16 addr1, __u
16 addr2)
{
__u16 tmp = dn_ntohs(addr1) ^ dn_ntohs(addr2);
int match = 16;
{
__u16 tmp = dn_ntohs(addr1) ^ dn_ntohs(addr2);
int match = 16;
@@
-833,9
+834,9
@@
static inline int dn_match_addr(__le16 addr1, __le16 addr2)
return match;
}
return match;
}
-static __
le16 dnet_select_source(const struct net_device *dev, __le
16 daddr, int scope)
+static __
u16 dnet_select_source(const struct net_device *dev, __u
16 daddr, int scope)
{
{
- __
le
16 saddr = 0;
+ __
u
16 saddr = 0;
struct dn_dev *dn_db = dev->dn_ptr;
struct dn_ifaddr *ifa;
int best_match = 0;
struct dn_dev *dn_db = dev->dn_ptr;
struct dn_ifaddr *ifa;
int best_match = 0;
@@
-860,14
+861,14
@@
static __le16 dnet_select_source(const struct net_device *dev, __le16 daddr, int
return saddr;
}
return saddr;
}
-static inline __
le
16 __dn_fib_res_prefsrc(struct dn_fib_res *res)
+static inline __
u
16 __dn_fib_res_prefsrc(struct dn_fib_res *res)
{
return dnet_select_source(DN_FIB_RES_DEV(*res), DN_FIB_RES_GW(*res), res->scope);
}
{
return dnet_select_source(DN_FIB_RES_DEV(*res), DN_FIB_RES_GW(*res), res->scope);
}
-static inline __
le16 dn_fib_rules_map_destination(__le
16 daddr, struct dn_fib_res *res)
+static inline __
u16 dn_fib_rules_map_destination(__u
16 daddr, struct dn_fib_res *res)
{
{
- __
le
16 mask = dnet_make_mask(res->prefixlen);
+ __
u
16 mask = dnet_make_mask(res->prefixlen);
return (daddr&~mask)|res->fi->fib_nh->nh_gw;
}
return (daddr&~mask)|res->fi->fib_nh->nh_gw;
}
@@
-891,13
+892,12
@@
static int dn_route_output_slow(struct dst_entry **pprt, const struct flowi *old
struct dn_fib_res res = { .fi = NULL, .type = RTN_UNICAST };
int err;
int free_res = 0;
struct dn_fib_res res = { .fi = NULL, .type = RTN_UNICAST };
int err;
int free_res = 0;
- __
le
16 gateway = 0;
+ __
u
16 gateway = 0;
if (decnet_debug_level & 16)
printk(KERN_DEBUG
"dn_route_output_slow: dst=%04x src=%04x mark=%d"
if (decnet_debug_level & 16)
printk(KERN_DEBUG
"dn_route_output_slow: dst=%04x src=%04x mark=%d"
- " iif=%d oif=%d\n", dn_ntohs(oldflp->fld_dst),
- dn_ntohs(oldflp->fld_src),
+ " iif=%d oif=%d\n", oldflp->fld_dst, oldflp->fld_src,
oldflp->fld_fwmark, loopback_dev.ifindex, oldflp->oif);
/* If we have an output interface, verify its a DECnet device */
oldflp->fld_fwmark, loopback_dev.ifindex, oldflp->oif);
/* If we have an output interface, verify its a DECnet device */
@@
-961,9
+961,8
@@
source_ok:
if (decnet_debug_level & 16)
printk(KERN_DEBUG
"dn_route_output_slow: initial checks complete."
if (decnet_debug_level & 16)
printk(KERN_DEBUG
"dn_route_output_slow: initial checks complete."
- " dst=%o4x src=%04x oif=%d try_hard=%d\n",
- dn_ntohs(fl.fld_dst), dn_ntohs(fl.fld_src),
- fl.oif, try_hard);
+ " dst=%o4x src=%04x oif=%d try_hard=%d\n", fl.fld_dst,
+ fl.fld_src, fl.oif, try_hard);
/*
* N.B. If the kernel is compiled without router support then
/*
* N.B. If the kernel is compiled without router support then
@@
-1219,8
+1218,8
@@
static int dn_route_input_slow(struct sk_buff *skb)
struct neighbour *neigh = NULL;
unsigned hash;
int flags = 0;
struct neighbour *neigh = NULL;
unsigned hash;
int flags = 0;
- __
le
16 gateway = 0;
- __
le
16 local_src = 0;
+ __
u
16 gateway = 0;
+ __
u
16 local_src = 0;
struct flowi fl = { .nl_u = { .dn_u =
{ .daddr = cb->dst,
.saddr = cb->src,
struct flowi fl = { .nl_u = { .dn_u =
{ .daddr = cb->dst,
.saddr = cb->src,
@@
-1267,7
+1266,7
@@
static int dn_route_input_slow(struct sk_buff *skb)
res.type = RTN_LOCAL;
flags |= RTCF_DIRECTSRC;
} else {
res.type = RTN_LOCAL;
flags |= RTCF_DIRECTSRC;
} else {
- __
le
16 src_map = fl.fld_src;
+ __
u
16 src_map = fl.fld_src;
free_res = 1;
out_dev = DN_FIB_RES_DEV(res);
free_res = 1;
out_dev = DN_FIB_RES_DEV(res);