Commit f6ff56cd authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

parents fb6d73d3 5a6f294e
...@@ -357,7 +357,7 @@ static inline void llc_pdu_init_as_test_rsp(struct sk_buff *skb, ...@@ -357,7 +357,7 @@ static inline void llc_pdu_init_as_test_rsp(struct sk_buff *skb,
/* LLC Type 1 XID command/response information fields format */ /* LLC Type 1 XID command/response information fields format */
struct llc_xid_info { struct llc_xid_info {
u8 fmt_id; /* always 0x18 for LLC */ u8 fmt_id; /* always 0x81 for LLC */
u8 type; /* different if NULL/non-NULL LSAP */ u8 type; /* different if NULL/non-NULL LSAP */
u8 rw; /* sender receive window */ u8 rw; /* sender receive window */
}; };
......
...@@ -552,8 +552,8 @@ extern u32 __tcp_select_window(struct sock *sk); ...@@ -552,8 +552,8 @@ extern u32 __tcp_select_window(struct sock *sk);
/* TCP timestamps are only 32-bits, this causes a slight /* TCP timestamps are only 32-bits, this causes a slight
* complication on 64-bit systems since we store a snapshot * complication on 64-bit systems since we store a snapshot
* of jiffies in the buffer control blocks below. We decidedly * of jiffies in the buffer control blocks below. We decided
* only use of the low 32-bits of jiffies and hide the ugly * to use only the low 32-bits of jiffies and hide the ugly
* casts with the following macro. * casts with the following macro.
*/ */
#define tcp_time_stamp ((__u32)(jiffies)) #define tcp_time_stamp ((__u32)(jiffies))
......
...@@ -367,7 +367,7 @@ static void tcp_rcv_rtt_update(struct tcp_sock *tp, u32 sample, int win_dep) ...@@ -367,7 +367,7 @@ static void tcp_rcv_rtt_update(struct tcp_sock *tp, u32 sample, int win_dep)
* are stalled on filesystem I/O. * are stalled on filesystem I/O.
* *
* Also, since we are only going for a minimum in the * Also, since we are only going for a minimum in the
* non-timestamp case, we do not smoother things out * non-timestamp case, we do not smooth things out
* else with timestamps disabled convergence takes too * else with timestamps disabled convergence takes too
* long. * long.
*/ */
...@@ -546,7 +546,7 @@ static void tcp_rtt_estimator(struct sock *sk, const __u32 mrtt) ...@@ -546,7 +546,7 @@ static void tcp_rtt_estimator(struct sock *sk, const __u32 mrtt)
* *
* Funny. This algorithm seems to be very broken. * Funny. This algorithm seems to be very broken.
* These formulae increase RTO, when it should be decreased, increase * These formulae increase RTO, when it should be decreased, increase
* too slowly, when it should be increased fastly, decrease too fastly * too slowly, when it should be increased quickly, decrease too quickly
* etc. I guess in BSD RTO takes ONE value, so that it is absolutely * etc. I guess in BSD RTO takes ONE value, so that it is absolutely
* does not matter how to _calculate_ it. Seems, it was trap * does not matter how to _calculate_ it. Seems, it was trap
* that VJ failed to avoid. 8) * that VJ failed to avoid. 8)
......
...@@ -1045,9 +1045,10 @@ int ipv6_dev_get_saddr(struct net_device *daddr_dev, ...@@ -1045,9 +1045,10 @@ int ipv6_dev_get_saddr(struct net_device *daddr_dev,
} }
#endif #endif
/* Rule 8: Use longest matching prefix */ /* Rule 8: Use longest matching prefix */
if (hiscore.rule < 8) if (hiscore.rule < 8) {
hiscore.matchlen = ipv6_addr_diff(&ifa_result->addr, daddr); hiscore.matchlen = ipv6_addr_diff(&ifa_result->addr, daddr);
score.rule++; hiscore.rule++;
}
score.matchlen = ipv6_addr_diff(&ifa->addr, daddr); score.matchlen = ipv6_addr_diff(&ifa->addr, daddr);
if (score.matchlen > hiscore.matchlen) { if (score.matchlen > hiscore.matchlen) {
score.rule = 8; score.rule = 8;
......
...@@ -287,7 +287,7 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname, ...@@ -287,7 +287,7 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname,
{ {
struct ipv6_txoptions *opt; struct ipv6_txoptions *opt;
if (optlen == 0) if (optlen == 0)
optval = 0; optval = NULL;
/* hop-by-hop / destination options are privileged option */ /* hop-by-hop / destination options are privileged option */
retv = -EPERM; retv = -EPERM;
......
...@@ -116,7 +116,9 @@ static int llc_ui_send_data(struct sock* sk, struct sk_buff *skb, int noblock) ...@@ -116,7 +116,9 @@ static int llc_ui_send_data(struct sock* sk, struct sk_buff *skb, int noblock)
struct llc_sock* llc = llc_sk(sk); struct llc_sock* llc = llc_sk(sk);
int rc = 0; int rc = 0;
if (unlikely(llc_data_accept_state(llc->state) || llc->p_flag)) { if (unlikely(llc_data_accept_state(llc->state) ||
llc->remote_busy_flag ||
llc->p_flag)) {
long timeout = sock_sndtimeo(sk, noblock); long timeout = sock_sndtimeo(sk, noblock);
rc = llc_ui_wait_for_busy_core(sk, timeout); rc = llc_ui_wait_for_busy_core(sk, timeout);
...@@ -542,6 +544,7 @@ static int llc_ui_wait_for_busy_core(struct sock *sk, long timeout) ...@@ -542,6 +544,7 @@ static int llc_ui_wait_for_busy_core(struct sock *sk, long timeout)
if (sk_wait_event(sk, &timeout, if (sk_wait_event(sk, &timeout,
(sk->sk_shutdown & RCV_SHUTDOWN) || (sk->sk_shutdown & RCV_SHUTDOWN) ||
(!llc_data_accept_state(llc->state) && (!llc_data_accept_state(llc->state) &&
!llc->remote_busy_flag &&
!llc->p_flag))) !llc->p_flag)))
break; break;
rc = -ERESTARTSYS; rc = -ERESTARTSYS;
......
...@@ -866,7 +866,8 @@ int llc_conn_ac_send_ack_if_needed(struct sock *sk, struct sk_buff *skb) ...@@ -866,7 +866,8 @@ int llc_conn_ac_send_ack_if_needed(struct sock *sk, struct sk_buff *skb)
llc->ack_must_be_send = 1; llc->ack_must_be_send = 1;
llc->ack_pf = pf_bit & 1; llc->ack_pf = pf_bit & 1;
} }
if (((llc->vR - llc->first_pdu_Ns + 129) % 128) >= llc->npta) { if (((llc->vR - llc->first_pdu_Ns + 1 + LLC_2_SEQ_NBR_MODULO)
% LLC_2_SEQ_NBR_MODULO) >= llc->npta) {
llc_conn_ac_send_rr_rsp_f_set_ackpf(sk, skb); llc_conn_ac_send_rr_rsp_f_set_ackpf(sk, skb);
llc->ack_must_be_send = 0; llc->ack_must_be_send = 0;
llc->ack_pf = 0; llc->ack_pf = 0;
...@@ -994,8 +995,8 @@ static int llc_conn_ac_inc_npta_value(struct sock *sk, struct sk_buff *skb) ...@@ -994,8 +995,8 @@ static int llc_conn_ac_inc_npta_value(struct sock *sk, struct sk_buff *skb)
llc->dec_step = 0; llc->dec_step = 0;
llc->dec_cntr = llc->inc_cntr = 2; llc->dec_cntr = llc->inc_cntr = 2;
++llc->npta; ++llc->npta;
if (llc->npta > 127) if (llc->npta > ~LLC_2_SEQ_NBR_MODULO)
llc->npta = 127 ; llc->npta = ~LLC_2_SEQ_NBR_MODULO ;
} else } else
--llc->inc_cntr; --llc->inc_cntr;
return 0; return 0;
...@@ -1065,9 +1066,10 @@ int llc_conn_ac_dec_tx_win_size(struct sock *sk, struct sk_buff *skb) ...@@ -1065,9 +1066,10 @@ int llc_conn_ac_dec_tx_win_size(struct sock *sk, struct sk_buff *skb)
struct llc_sock *llc = llc_sk(sk); struct llc_sock *llc = llc_sk(sk);
u8 unacked_pdu = skb_queue_len(&llc->pdu_unack_q); u8 unacked_pdu = skb_queue_len(&llc->pdu_unack_q);
llc->k -= unacked_pdu; if (llc->k - unacked_pdu < 1)
if (llc->k < 2) llc->k = 1;
llc->k = 2; else
llc->k -= unacked_pdu;
return 0; return 0;
} }
...@@ -1084,8 +1086,8 @@ int llc_conn_ac_inc_tx_win_size(struct sock *sk, struct sk_buff *skb) ...@@ -1084,8 +1086,8 @@ int llc_conn_ac_inc_tx_win_size(struct sock *sk, struct sk_buff *skb)
struct llc_sock *llc = llc_sk(sk); struct llc_sock *llc = llc_sk(sk);
llc->k += 1; llc->k += 1;
if (llc->k > 128) if (llc->k > ~LLC_2_SEQ_NBR_MODULO)
llc->k = 128 ; llc->k = ~LLC_2_SEQ_NBR_MODULO ;
return 0; return 0;
} }
...@@ -1309,7 +1311,7 @@ int llc_conn_ac_set_vs_nr(struct sock *sk, struct sk_buff *skb) ...@@ -1309,7 +1311,7 @@ int llc_conn_ac_set_vs_nr(struct sock *sk, struct sk_buff *skb)
static int llc_conn_ac_inc_vs_by_1(struct sock *sk, struct sk_buff *skb) static int llc_conn_ac_inc_vs_by_1(struct sock *sk, struct sk_buff *skb)
{ {
llc_sk(sk)->vS = (llc_sk(sk)->vS + 1) % 128; llc_sk(sk)->vS = (llc_sk(sk)->vS + 1) % LLC_2_SEQ_NBR_MODULO;
return 0; return 0;
} }
......
...@@ -1395,6 +1395,13 @@ void nf_conntrack_cleanup(void) ...@@ -1395,6 +1395,13 @@ void nf_conntrack_cleanup(void)
kmem_cache_destroy(nf_conntrack_expect_cachep); kmem_cache_destroy(nf_conntrack_expect_cachep);
free_conntrack_hash(nf_conntrack_hash, nf_conntrack_vmalloc, free_conntrack_hash(nf_conntrack_hash, nf_conntrack_vmalloc,
nf_conntrack_htable_size); nf_conntrack_htable_size);
/* free l3proto protocol tables */
for (i = 0; i < PF_MAX; i++)
if (nf_ct_protos[i]) {
kfree(nf_ct_protos[i]);
nf_ct_protos[i] = NULL;
}
} }
static struct list_head *alloc_hashtable(int size, int *vmalloced) static struct list_head *alloc_hashtable(int size, int *vmalloced)
......
...@@ -694,7 +694,7 @@ static int init_or_cleanup(int init) ...@@ -694,7 +694,7 @@ static int init_or_cleanup(int init)
cleanup_proc_stat: cleanup_proc_stat:
#endif #endif
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
proc_net_remove("nf_conntrack_stat"); remove_proc_entry("nf_conntrack", proc_net_stat);
cleanup_proc_exp: cleanup_proc_exp:
proc_net_remove("nf_conntrack_expect"); proc_net_remove("nf_conntrack_expect");
cleanup_proc: cleanup_proc:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment