diff --git a/[refs] b/[refs] index 57d46cde9e5b..9505d4d10c69 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 40b215e594b65a3488576c9d24b367548e18902a +refs/heads/master: d68b82705a4a754e5773f412c6b8f1e65259bc8b diff --git a/trunk/net/ipv4/tcp_input.c b/trunk/net/ipv4/tcp_input.c index d6ea970a1513..de30e70ff256 100644 --- a/trunk/net/ipv4/tcp_input.c +++ b/trunk/net/ipv4/tcp_input.c @@ -947,21 +947,17 @@ static void tcp_update_reordering(struct sock *sk, const int metric, { struct tcp_sock *tp = tcp_sk(sk); if (metric > tp->reordering) { - int mib_idx; - tp->reordering = min(TCP_MAX_REORDERING, metric); /* This exciting event is worth to be remembered. 8) */ if (ts) - mib_idx = LINUX_MIB_TCPTSREORDER; + NET_INC_STATS_BH(LINUX_MIB_TCPTSREORDER); else if (tcp_is_reno(tp)) - mib_idx = LINUX_MIB_TCPRENOREORDER; + NET_INC_STATS_BH(LINUX_MIB_TCPRENOREORDER); else if (tcp_is_fack(tp)) - mib_idx = LINUX_MIB_TCPFACKREORDER; + NET_INC_STATS_BH(LINUX_MIB_TCPFACKREORDER); else - mib_idx = LINUX_MIB_TCPSACKREORDER; - - NET_INC_STATS_BH(mib_idx); + NET_INC_STATS_BH(LINUX_MIB_TCPSACKREORDER); #if FASTRETRANS_DEBUG > 1 printk(KERN_DEBUG "Disorder%d %d %u f%u s%u rr%d\n", tp->rx_opt.sack_ok, inet_csk(sk)->icsk_ca_state, @@ -1460,22 +1456,18 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, if (!tcp_is_sackblock_valid(tp, dup_sack, sp[used_sacks].start_seq, sp[used_sacks].end_seq)) { - int mib_idx; - if (dup_sack) { if (!tp->undo_marker) - mib_idx = LINUX_MIB_TCPDSACKIGNOREDNOUNDO; + NET_INC_STATS_BH(LINUX_MIB_TCPDSACKIGNOREDNOUNDO); else - mib_idx = LINUX_MIB_TCPDSACKIGNOREDOLD; + NET_INC_STATS_BH(LINUX_MIB_TCPDSACKIGNOREDOLD); } else { /* Don't count olds caused by ACK reordering */ if ((TCP_SKB_CB(ack_skb)->ack_seq != tp->snd_una) && !after(sp[used_sacks].end_seq, tp->snd_una)) continue; - mib_idx = LINUX_MIB_TCPSACKDISCARD; + NET_INC_STATS_BH(LINUX_MIB_TCPSACKDISCARD); } - - NET_INC_STATS_BH(mib_idx); if (i == 0) first_sack_index = -1; continue; @@ -2388,19 +2380,15 @@ static int tcp_try_undo_recovery(struct sock *sk) struct tcp_sock *tp = tcp_sk(sk); if (tcp_may_undo(tp)) { - int mib_idx; - /* Happy end! We did not retransmit anything * or our original transmission succeeded. */ DBGUNDO(sk, inet_csk(sk)->icsk_ca_state == TCP_CA_Loss ? "loss" : "retrans"); tcp_undo_cwr(sk, 1); if (inet_csk(sk)->icsk_ca_state == TCP_CA_Loss) - mib_idx = LINUX_MIB_TCPLOSSUNDO; + NET_INC_STATS_BH(LINUX_MIB_TCPLOSSUNDO); else - mib_idx = LINUX_MIB_TCPFULLUNDO; - - NET_INC_STATS_BH(mib_idx); + NET_INC_STATS_BH(LINUX_MIB_TCPFULLUNDO); tp->undo_marker = 0; } if (tp->snd_una == tp->high_seq && tcp_is_reno(tp)) { @@ -2572,7 +2560,7 @@ static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked, int flag) int is_dupack = !(flag & (FLAG_SND_UNA_ADVANCED | FLAG_NOT_DUP)); int do_lost = is_dupack || ((flag & FLAG_DATA_SACKED) && (tcp_fackets_out(tp) > tp->reordering)); - int fast_rexmit = 0, mib_idx; + int fast_rexmit = 0; if (WARN_ON(!tp->packets_out && tp->sacked_out)) tp->sacked_out = 0; @@ -2695,11 +2683,9 @@ static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked, int flag) /* Otherwise enter Recovery state */ if (tcp_is_reno(tp)) - mib_idx = LINUX_MIB_TCPRENORECOVERY; + NET_INC_STATS_BH(LINUX_MIB_TCPRENORECOVERY); else - mib_idx = LINUX_MIB_TCPSACKRECOVERY; - - NET_INC_STATS_BH(mib_idx); + NET_INC_STATS_BH(LINUX_MIB_TCPSACKRECOVERY); tp->high_seq = tp->snd_nxt; tp->prior_ssthresh = 0; @@ -3714,14 +3700,10 @@ static inline int tcp_sack_extend(struct tcp_sack_block *sp, u32 seq, static void tcp_dsack_set(struct tcp_sock *tp, u32 seq, u32 end_seq) { if (tcp_is_sack(tp) && sysctl_tcp_dsack) { - int mib_idx; - if (before(seq, tp->rcv_nxt)) - mib_idx = LINUX_MIB_TCPDSACKOLDSENT; + NET_INC_STATS_BH(LINUX_MIB_TCPDSACKOLDSENT); else - mib_idx = LINUX_MIB_TCPDSACKOFOSENT; - - NET_INC_STATS_BH(mib_idx); + NET_INC_STATS_BH(LINUX_MIB_TCPDSACKOFOSENT); tp->rx_opt.dsack = 1; tp->duplicate_sack[0].start_seq = seq; diff --git a/trunk/net/ipv4/tcp_output.c b/trunk/net/ipv4/tcp_output.c index edef2afe905e..8f83ab432705 100644 --- a/trunk/net/ipv4/tcp_output.c +++ b/trunk/net/ipv4/tcp_output.c @@ -1985,17 +1985,14 @@ void tcp_xmit_retransmit_queue(struct sock *sk) if (sacked & TCPCB_LOST) { if (!(sacked & (TCPCB_SACKED_ACKED|TCPCB_SACKED_RETRANS))) { - int mib_idx; - if (tcp_retransmit_skb(sk, skb)) { tp->retransmit_skb_hint = NULL; return; } if (icsk->icsk_ca_state != TCP_CA_Loss) - mib_idx = LINUX_MIB_TCPFASTRETRANS; + NET_INC_STATS_BH(LINUX_MIB_TCPFASTRETRANS); else - mib_idx = LINUX_MIB_TCPSLOWSTARTRETRANS; - NET_INC_STATS_BH(mib_idx); + NET_INC_STATS_BH(LINUX_MIB_TCPSLOWSTARTRETRANS); if (skb == tcp_write_queue_head(sk)) inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, diff --git a/trunk/net/ipv4/tcp_timer.c b/trunk/net/ipv4/tcp_timer.c index 6a480d1fd8f6..3e358cbb1247 100644 --- a/trunk/net/ipv4/tcp_timer.c +++ b/trunk/net/ipv4/tcp_timer.c @@ -326,27 +326,24 @@ static void tcp_retransmit_timer(struct sock *sk) goto out; if (icsk->icsk_retransmits == 0) { - int mib_idx; - if (icsk->icsk_ca_state == TCP_CA_Disorder || icsk->icsk_ca_state == TCP_CA_Recovery) { if (tcp_is_sack(tp)) { if (icsk->icsk_ca_state == TCP_CA_Recovery) - mib_idx = LINUX_MIB_TCPSACKRECOVERYFAIL; + NET_INC_STATS_BH(LINUX_MIB_TCPSACKRECOVERYFAIL); else - mib_idx = LINUX_MIB_TCPSACKFAILURES; + NET_INC_STATS_BH(LINUX_MIB_TCPSACKFAILURES); } else { if (icsk->icsk_ca_state == TCP_CA_Recovery) - mib_idx = LINUX_MIB_TCPRENORECOVERYFAIL; + NET_INC_STATS_BH(LINUX_MIB_TCPRENORECOVERYFAIL); else - mib_idx = LINUX_MIB_TCPRENOFAILURES; + NET_INC_STATS_BH(LINUX_MIB_TCPRENOFAILURES); } } else if (icsk->icsk_ca_state == TCP_CA_Loss) { - mib_idx = LINUX_MIB_TCPLOSSFAILURES; + NET_INC_STATS_BH(LINUX_MIB_TCPLOSSFAILURES); } else { - mib_idx = LINUX_MIB_TCPTIMEOUTS; + NET_INC_STATS_BH(LINUX_MIB_TCPTIMEOUTS); } - NET_INC_STATS_BH(mib_idx); } if (tcp_use_frto(sk)) { diff --git a/trunk/net/ipv6/addrconf.c b/trunk/net/ipv6/addrconf.c index 84127d854cfc..8b6875f02039 100644 --- a/trunk/net/ipv6/addrconf.c +++ b/trunk/net/ipv6/addrconf.c @@ -578,6 +578,13 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr, int pfxlen, struct rt6_info *rt; int hash; int err = 0; + int addr_type = ipv6_addr_type(addr); + + if (addr_type == IPV6_ADDR_ANY || + addr_type & IPV6_ADDR_MULTICAST || + (!(idev->dev->flags & IFF_LOOPBACK) && + addr_type & IPV6_ADDR_LOOPBACK)) + return ERR_PTR(-EADDRNOTAVAIL); rcu_read_lock_bh(); if (idev->dead) {