x25: remove the BKL
This replaces all instances of lock_kernel in x25 with lock_sock, taking care to release the socket lock around sleeping functions (sock_alloc_send_skb and skb_recv_datagram). It is not clear whether this is a correct solution, but it seem to be what other protocols do in the same situation. Includes a fix suggested by Eric Dumazet. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: David S. Miller <davem@davemloft.net> Tested-by: Andrew Hendry <andrew.hendry@gmail.com> Cc: linux-x25@vger.kernel.org Cc: netdev@vger.kernel.org Cc: Eric Dumazet <eric.dumazet@gmail.com>
This commit is contained in:
@@ -68,8 +68,11 @@ int x25_output(struct sock *sk, struct sk_buff *skb)
|
||||
frontlen = skb_headroom(skb);
|
||||
|
||||
while (skb->len > 0) {
|
||||
if ((skbn = sock_alloc_send_skb(sk, frontlen + max_len,
|
||||
noblock, &err)) == NULL){
|
||||
release_sock(sk);
|
||||
skbn = sock_alloc_send_skb(sk, frontlen + max_len,
|
||||
noblock, &err);
|
||||
lock_sock(sk);
|
||||
if (!skbn) {
|
||||
if (err == -EWOULDBLOCK && noblock){
|
||||
kfree_skb(skb);
|
||||
return sent;
|
||||
|
Reference in New Issue
Block a user