diff options
author | Arnaldo Carvalho de Melo <acme@mandriva.com> | 2005-09-22 06:57:21 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@mandriva.com> | 2005-09-22 06:57:21 -0400 |
commit | d389424e00f9097cd24b3df4ca0ab7221f140eeb (patch) | |
tree | 9ffa95a4e791b19e5d793a06943e40221858b236 /net/llc/llc_if.c | |
parent | 2928c19e1086e2f1e90d05931437ab6f1e4cfdc8 (diff) |
[LLC]: Fix the accept path
Borrowing the structure of TCP/IP for this. On the receive of new connections I
was bh_lock_socking the _new_ sock, not the listening one, duh, now it survives
the ssh connections storm I've been using to test this specific bug.
Also fixes send side skb sock accounting.
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
Diffstat (limited to 'net/llc/llc_if.c')
-rw-r--r-- | net/llc/llc_if.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/llc/llc_if.c b/net/llc/llc_if.c index 764dbd704051..ba90f7f0801a 100644 --- a/net/llc/llc_if.c +++ b/net/llc/llc_if.c | |||
@@ -107,6 +107,7 @@ int llc_establish_connection(struct sock *sk, u8 *lmac, u8 *dmac, u8 dsap) | |||
107 | ev->type = LLC_CONN_EV_TYPE_PRIM; | 107 | ev->type = LLC_CONN_EV_TYPE_PRIM; |
108 | ev->prim = LLC_CONN_PRIM; | 108 | ev->prim = LLC_CONN_PRIM; |
109 | ev->prim_type = LLC_PRIM_TYPE_REQ; | 109 | ev->prim_type = LLC_PRIM_TYPE_REQ; |
110 | skb_set_owner_w(skb, sk); | ||
110 | rc = llc_conn_state_process(sk, skb); | 111 | rc = llc_conn_state_process(sk, skb); |
111 | } | 112 | } |
112 | out_put: | 113 | out_put: |
@@ -141,6 +142,7 @@ int llc_send_disc(struct sock *sk) | |||
141 | skb = alloc_skb(0, GFP_ATOMIC); | 142 | skb = alloc_skb(0, GFP_ATOMIC); |
142 | if (!skb) | 143 | if (!skb) |
143 | goto out; | 144 | goto out; |
145 | skb_set_owner_w(skb, sk); | ||
144 | sk->sk_state = TCP_CLOSING; | 146 | sk->sk_state = TCP_CLOSING; |
145 | ev = llc_conn_ev(skb); | 147 | ev = llc_conn_ev(skb); |
146 | ev->type = LLC_CONN_EV_TYPE_PRIM; | 148 | ev->type = LLC_CONN_EV_TYPE_PRIM; |