stream.c (f72222c74bd642182cc892c99df65cb105c61193) | stream.c (aa395145165cb06a0d0885221bbe0ce4a564391d) |
---|---|
1/* 2 * SUCS NET3: 3 * 4 * Generic stream handling routines. These are generic for most 5 * protocols. Even IP. Tonight 8-). 6 * This is used because TCP, LLC (others too) layer all have mostly 7 * identical sendmsg() and recvmsg() code. 8 * So we (will) share it here. --- 18 unchanged lines hidden (view full) --- 27 */ 28void sk_stream_write_space(struct sock *sk) 29{ 30 struct socket *sock = sk->sk_socket; 31 32 if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk) && sock) { 33 clear_bit(SOCK_NOSPACE, &sock->flags); 34 | 1/* 2 * SUCS NET3: 3 * 4 * Generic stream handling routines. These are generic for most 5 * protocols. Even IP. Tonight 8-). 6 * This is used because TCP, LLC (others too) layer all have mostly 7 * identical sendmsg() and recvmsg() code. 8 * So we (will) share it here. --- 18 unchanged lines hidden (view full) --- 27 */ 28void sk_stream_write_space(struct sock *sk) 29{ 30 struct socket *sock = sk->sk_socket; 31 32 if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk) && sock) { 33 clear_bit(SOCK_NOSPACE, &sock->flags); 34 |
35 if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) 36 wake_up_interruptible_poll(sk->sk_sleep, POLLOUT | | 35 if (sk_sleep(sk) && waitqueue_active(sk_sleep(sk))) 36 wake_up_interruptible_poll(sk_sleep(sk), POLLOUT | |
37 POLLWRNORM | POLLWRBAND); 38 if (sock->fasync_list && !(sk->sk_shutdown & SEND_SHUTDOWN)) 39 sock_wake_async(sock, SOCK_WAKE_SPACE, POLL_OUT); 40 } 41} 42 43EXPORT_SYMBOL(sk_stream_write_space); 44 --- 16 unchanged lines hidden (view full) --- 61 return err; 62 if ((1 << sk->sk_state) & ~(TCPF_SYN_SENT | TCPF_SYN_RECV)) 63 return -EPIPE; 64 if (!*timeo_p) 65 return -EAGAIN; 66 if (signal_pending(tsk)) 67 return sock_intr_errno(*timeo_p); 68 | 37 POLLWRNORM | POLLWRBAND); 38 if (sock->fasync_list && !(sk->sk_shutdown & SEND_SHUTDOWN)) 39 sock_wake_async(sock, SOCK_WAKE_SPACE, POLL_OUT); 40 } 41} 42 43EXPORT_SYMBOL(sk_stream_write_space); 44 --- 16 unchanged lines hidden (view full) --- 61 return err; 62 if ((1 << sk->sk_state) & ~(TCPF_SYN_SENT | TCPF_SYN_RECV)) 63 return -EPIPE; 64 if (!*timeo_p) 65 return -EAGAIN; 66 if (signal_pending(tsk)) 67 return sock_intr_errno(*timeo_p); 68 |
69 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); | 69 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); |
70 sk->sk_write_pending++; 71 done = sk_wait_event(sk, timeo_p, 72 !sk->sk_err && 73 !((1 << sk->sk_state) & 74 ~(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT))); | 70 sk->sk_write_pending++; 71 done = sk_wait_event(sk, timeo_p, 72 !sk->sk_err && 73 !((1 << sk->sk_state) & 74 ~(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT))); |
75 finish_wait(sk->sk_sleep, &wait); | 75 finish_wait(sk_sleep(sk), &wait); |
76 sk->sk_write_pending--; 77 } while (!done); 78 return 0; 79} 80 81EXPORT_SYMBOL(sk_stream_wait_connect); 82 83/** --- 7 unchanged lines hidden (view full) --- 91} 92 93void sk_stream_wait_close(struct sock *sk, long timeout) 94{ 95 if (timeout) { 96 DEFINE_WAIT(wait); 97 98 do { | 76 sk->sk_write_pending--; 77 } while (!done); 78 return 0; 79} 80 81EXPORT_SYMBOL(sk_stream_wait_connect); 82 83/** --- 7 unchanged lines hidden (view full) --- 91} 92 93void sk_stream_wait_close(struct sock *sk, long timeout) 94{ 95 if (timeout) { 96 DEFINE_WAIT(wait); 97 98 do { |
99 prepare_to_wait(sk->sk_sleep, &wait, | 99 prepare_to_wait(sk_sleep(sk), &wait, |
100 TASK_INTERRUPTIBLE); 101 if (sk_wait_event(sk, &timeout, !sk_stream_closing(sk))) 102 break; 103 } while (!signal_pending(current) && timeout); 104 | 100 TASK_INTERRUPTIBLE); 101 if (sk_wait_event(sk, &timeout, !sk_stream_closing(sk))) 102 break; 103 } while (!signal_pending(current) && timeout); 104 |
105 finish_wait(sk->sk_sleep, &wait); | 105 finish_wait(sk_sleep(sk), &wait); |
106 } 107} 108 109EXPORT_SYMBOL(sk_stream_wait_close); 110 111/** 112 * sk_stream_wait_memory - Wait for more memory for a socket 113 * @sk: socket to wait for memory --- 7 unchanged lines hidden (view full) --- 121 DEFINE_WAIT(wait); 122 123 if (sk_stream_memory_free(sk)) 124 current_timeo = vm_wait = (net_random() % (HZ / 5)) + 2; 125 126 while (1) { 127 set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); 128 | 106 } 107} 108 109EXPORT_SYMBOL(sk_stream_wait_close); 110 111/** 112 * sk_stream_wait_memory - Wait for more memory for a socket 113 * @sk: socket to wait for memory --- 7 unchanged lines hidden (view full) --- 121 DEFINE_WAIT(wait); 122 123 if (sk_stream_memory_free(sk)) 124 current_timeo = vm_wait = (net_random() % (HZ / 5)) + 2; 125 126 while (1) { 127 set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); 128 |
129 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); | 129 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); |
130 131 if (sk->sk_err || (sk->sk_shutdown & SEND_SHUTDOWN)) 132 goto do_error; 133 if (!*timeo_p) 134 goto do_nonblock; 135 if (signal_pending(current)) 136 goto do_interrupted; 137 clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); --- 14 unchanged lines hidden (view full) --- 152 if (current_timeo != MAX_SCHEDULE_TIMEOUT && 153 (current_timeo -= vm_wait) < 0) 154 current_timeo = 0; 155 vm_wait = 0; 156 } 157 *timeo_p = current_timeo; 158 } 159out: | 130 131 if (sk->sk_err || (sk->sk_shutdown & SEND_SHUTDOWN)) 132 goto do_error; 133 if (!*timeo_p) 134 goto do_nonblock; 135 if (signal_pending(current)) 136 goto do_interrupted; 137 clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); --- 14 unchanged lines hidden (view full) --- 152 if (current_timeo != MAX_SCHEDULE_TIMEOUT && 153 (current_timeo -= vm_wait) < 0) 154 current_timeo = 0; 155 vm_wait = 0; 156 } 157 *timeo_p = current_timeo; 158 } 159out: |
160 finish_wait(sk->sk_sleep, &wait); | 160 finish_wait(sk_sleep(sk), &wait); |
161 return err; 162 163do_error: 164 err = -EPIPE; 165 goto out; 166do_nonblock: 167 err = -EAGAIN; 168 goto out; --- 42 unchanged lines hidden --- | 161 return err; 162 163do_error: 164 err = -EPIPE; 165 goto out; 166do_nonblock: 167 err = -EAGAIN; 168 goto out; --- 42 unchanged lines hidden --- |