diff options
author | Paul Mackerras <paulus@samba.org> | 2006-09-13 17:07:18 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-09-13 17:07:18 -0400 |
commit | c547fc28ab3e8716076fdaf4bd0260c5d63a18f7 (patch) | |
tree | 34af1fa64a63618660187ae58ad182665a1861ef /net | |
parent | 3dd836a56de0d4f049438412959b905e1db4666e (diff) | |
parent | 63b98080daa35f0d682db04f4fb7ada010888752 (diff) |
Merge branch 'linux-2.6'
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/ip_output.c | 1 | ||||
-rw-r--r-- | net/ipv6/exthdrs.c | 29 | ||||
-rw-r--r-- | net/socket.c | 3 |
3 files changed, 19 insertions, 14 deletions
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 4c20f5546893..a2ede167e045 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -440,6 +440,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*)) | |||
440 | iph = skb->nh.iph; | 440 | iph = skb->nh.iph; |
441 | 441 | ||
442 | if (unlikely((iph->frag_off & htons(IP_DF)) && !skb->local_df)) { | 442 | if (unlikely((iph->frag_off & htons(IP_DF)) && !skb->local_df)) { |
443 | IP_INC_STATS(IPSTATS_MIB_FRAGFAILS); | ||
443 | icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, | 444 | icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, |
444 | htonl(dst_mtu(&rt->u.dst))); | 445 | htonl(dst_mtu(&rt->u.dst))); |
445 | kfree_skb(skb); | 446 | kfree_skb(skb); |
diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c index 9d0ee7f0eeb5..86dac106873b 100644 --- a/net/ipv6/exthdrs.c +++ b/net/ipv6/exthdrs.c | |||
@@ -635,14 +635,17 @@ ipv6_renew_options(struct sock *sk, struct ipv6_txoptions *opt, | |||
635 | struct ipv6_txoptions *opt2; | 635 | struct ipv6_txoptions *opt2; |
636 | int err; | 636 | int err; |
637 | 637 | ||
638 | if (newtype != IPV6_HOPOPTS && opt->hopopt) | 638 | if (opt) { |
639 | tot_len += CMSG_ALIGN(ipv6_optlen(opt->hopopt)); | 639 | if (newtype != IPV6_HOPOPTS && opt->hopopt) |
640 | if (newtype != IPV6_RTHDRDSTOPTS && opt->dst0opt) | 640 | tot_len += CMSG_ALIGN(ipv6_optlen(opt->hopopt)); |
641 | tot_len += CMSG_ALIGN(ipv6_optlen(opt->dst0opt)); | 641 | if (newtype != IPV6_RTHDRDSTOPTS && opt->dst0opt) |
642 | if (newtype != IPV6_RTHDR && opt->srcrt) | 642 | tot_len += CMSG_ALIGN(ipv6_optlen(opt->dst0opt)); |
643 | tot_len += CMSG_ALIGN(ipv6_optlen(opt->srcrt)); | 643 | if (newtype != IPV6_RTHDR && opt->srcrt) |
644 | if (newtype != IPV6_DSTOPTS && opt->dst1opt) | 644 | tot_len += CMSG_ALIGN(ipv6_optlen(opt->srcrt)); |
645 | tot_len += CMSG_ALIGN(ipv6_optlen(opt->dst1opt)); | 645 | if (newtype != IPV6_DSTOPTS && opt->dst1opt) |
646 | tot_len += CMSG_ALIGN(ipv6_optlen(opt->dst1opt)); | ||
647 | } | ||
648 | |||
646 | if (newopt && newoptlen) | 649 | if (newopt && newoptlen) |
647 | tot_len += CMSG_ALIGN(newoptlen); | 650 | tot_len += CMSG_ALIGN(newoptlen); |
648 | 651 | ||
@@ -659,25 +662,25 @@ ipv6_renew_options(struct sock *sk, struct ipv6_txoptions *opt, | |||
659 | opt2->tot_len = tot_len; | 662 | opt2->tot_len = tot_len; |
660 | p = (char *)(opt2 + 1); | 663 | p = (char *)(opt2 + 1); |
661 | 664 | ||
662 | err = ipv6_renew_option(opt->hopopt, newopt, newoptlen, | 665 | err = ipv6_renew_option(opt ? opt->hopopt : NULL, newopt, newoptlen, |
663 | newtype != IPV6_HOPOPTS, | 666 | newtype != IPV6_HOPOPTS, |
664 | &opt2->hopopt, &p); | 667 | &opt2->hopopt, &p); |
665 | if (err) | 668 | if (err) |
666 | goto out; | 669 | goto out; |
667 | 670 | ||
668 | err = ipv6_renew_option(opt->dst0opt, newopt, newoptlen, | 671 | err = ipv6_renew_option(opt ? opt->dst0opt : NULL, newopt, newoptlen, |
669 | newtype != IPV6_RTHDRDSTOPTS, | 672 | newtype != IPV6_RTHDRDSTOPTS, |
670 | &opt2->dst0opt, &p); | 673 | &opt2->dst0opt, &p); |
671 | if (err) | 674 | if (err) |
672 | goto out; | 675 | goto out; |
673 | 676 | ||
674 | err = ipv6_renew_option(opt->srcrt, newopt, newoptlen, | 677 | err = ipv6_renew_option(opt ? opt->srcrt : NULL, newopt, newoptlen, |
675 | newtype != IPV6_RTHDR, | 678 | newtype != IPV6_RTHDR, |
676 | (struct ipv6_opt_hdr **)opt2->srcrt, &p); | 679 | (struct ipv6_opt_hdr **)&opt2->srcrt, &p); |
677 | if (err) | 680 | if (err) |
678 | goto out; | 681 | goto out; |
679 | 682 | ||
680 | err = ipv6_renew_option(opt->dst1opt, newopt, newoptlen, | 683 | err = ipv6_renew_option(opt ? opt->dst1opt : NULL, newopt, newoptlen, |
681 | newtype != IPV6_DSTOPTS, | 684 | newtype != IPV6_DSTOPTS, |
682 | &opt2->dst1opt, &p); | 685 | &opt2->dst1opt, &p); |
683 | if (err) | 686 | if (err) |
diff --git a/net/socket.c b/net/socket.c index b4848ce0d6ac..6d261bf206fc 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -1178,7 +1178,8 @@ static int __sock_create(int family, int type, int protocol, struct socket **res | |||
1178 | */ | 1178 | */ |
1179 | 1179 | ||
1180 | if (!(sock = sock_alloc())) { | 1180 | if (!(sock = sock_alloc())) { |
1181 | printk(KERN_WARNING "socket: no more sockets\n"); | 1181 | if (net_ratelimit()) |
1182 | printk(KERN_WARNING "socket: no more sockets\n"); | ||
1182 | err = -ENFILE; /* Not exactly a match, but its the | 1183 | err = -ENFILE; /* Not exactly a match, but its the |
1183 | closest posix thing */ | 1184 | closest posix thing */ |
1184 | goto out; | 1185 | goto out; |