X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=net%2Fcore%2Fstream.c;h=755bacbcb321c296a45c5d53ae872469674aa4a8;hb=463236557db4b5d4de9eb3fafa2e7d7905ac65ab;hp=35e25259fd95712a0145853eeea4f01493ad5599;hpb=123656d4cc8c946f578ebd18c2050f5251720428;p=linux-2.6-omap-h63xx.git diff --git a/net/core/stream.c b/net/core/stream.c index 35e25259fd9..755bacbcb32 100644 --- a/net/core/stream.c +++ b/net/core/stream.c @@ -69,7 +69,7 @@ int sk_stream_wait_connect(struct sock *sk, long *timeo_p) sk->sk_write_pending++; done = sk_wait_event(sk, timeo_p, !sk->sk_err && - !((1 << sk->sk_state) & + !((1 << sk->sk_state) & ~(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT))); finish_wait(sk->sk_sleep, &wait); sk->sk_write_pending--; @@ -139,7 +139,7 @@ int sk_stream_wait_memory(struct sock *sk, long *timeo_p) set_bit(SOCK_NOSPACE, &sk->sk_socket->flags); sk->sk_write_pending++; - sk_wait_event(sk, ¤t_timeo, !sk->sk_err && + sk_wait_event(sk, ¤t_timeo, !sk->sk_err && !(sk->sk_shutdown & SEND_SHUTDOWN) && sk_stream_memory_free(sk) && vm_wait); @@ -176,6 +176,7 @@ void sk_stream_rfree(struct sk_buff *skb) { struct sock *sk = skb->sk; + skb_truesize_check(skb); atomic_sub(skb->truesize, &sk->sk_rmem_alloc); sk->sk_forward_alloc += skb->truesize; } @@ -195,15 +196,13 @@ EXPORT_SYMBOL(sk_stream_error); void __sk_stream_mem_reclaim(struct sock *sk) { - if (sk->sk_forward_alloc >= SK_STREAM_MEM_QUANTUM) { - atomic_sub(sk->sk_forward_alloc / SK_STREAM_MEM_QUANTUM, - sk->sk_prot->memory_allocated); - sk->sk_forward_alloc &= SK_STREAM_MEM_QUANTUM - 1; - if (*sk->sk_prot->memory_pressure && - (atomic_read(sk->sk_prot->memory_allocated) < - sk->sk_prot->sysctl_mem[0])) - *sk->sk_prot->memory_pressure = 0; - } + atomic_sub(sk->sk_forward_alloc / SK_STREAM_MEM_QUANTUM, + sk->sk_prot->memory_allocated); + sk->sk_forward_alloc &= SK_STREAM_MEM_QUANTUM - 1; + if (*sk->sk_prot->memory_pressure && + (atomic_read(sk->sk_prot->memory_allocated) < + sk->sk_prot->sysctl_mem[0])) + *sk->sk_prot->memory_pressure = 0; } EXPORT_SYMBOL(__sk_stream_mem_reclaim);