X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=net%2Fdecnet%2Fdn_route.c;h=743e9fcf7c5ae2f4697f5a796be7e69e319868ae;hb=20dbfad8e5dfea56b3cb0cfd4465f01c37b57aa6;hp=e172cf98d7fc3bdfda1831f06fed18fa20e097c6;hpb=d62e54abca1146981fc9f98f85ff398a113a22c2;p=deliverable%2Flinux.git diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c index e172cf98d7fc..743e9fcf7c5a 100644 --- a/net/decnet/dn_route.c +++ b/net/decnet/dn_route.c @@ -55,7 +55,6 @@ GNU General Public License for more details. *******************************************************************************/ -#include #include #include #include @@ -629,8 +628,7 @@ int dn_route_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type padlen); if (flags & DN_RT_PKT_CNTL) { - if (unlikely(skb_is_nonlinear(skb)) && - skb_linearize(skb, GFP_ATOMIC) != 0) + if (unlikely(skb_linearize(skb))) goto dump_it; switch(flags & DN_RT_CNTL_MSK) { @@ -927,8 +925,13 @@ static int dn_route_output_slow(struct dst_entry **pprt, const struct flowi *old for(dev_out = dev_base; dev_out; dev_out = dev_out->next) { if (!dev_out->dn_ptr) continue; - if (dn_dev_islocal(dev_out, oldflp->fld_src)) - break; + if (!dn_dev_islocal(dev_out, oldflp->fld_src)) + continue; + if ((dev_out->flags & IFF_LOOPBACK) && + oldflp->fld_dst && + !dn_dev_islocal(dev_out, oldflp->fld_dst)) + continue; + break; } read_unlock(&dev_base_lock); if (dev_out == NULL)