svc.c (87d8a69709d971913e6cc7210450fcb8be963667) | svc.c (aa395145165cb06a0d0885221bbe0ce4a564391d) |
---|---|
1/* net/atm/svc.c - ATM SVC sockets */ 2 3/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ 4 5#define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__ 6 7#include <linux/string.h> 8#include <linux/net.h> /* struct socket, struct proto_ops */ --- 35 unchanged lines hidden (view full) --- 44static void svc_disconnect(struct atm_vcc *vcc) 45{ 46 DEFINE_WAIT(wait); 47 struct sk_buff *skb; 48 struct sock *sk = sk_atm(vcc); 49 50 pr_debug("%p\n", vcc); 51 if (test_bit(ATM_VF_REGIS, &vcc->flags)) { | 1/* net/atm/svc.c - ATM SVC sockets */ 2 3/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ 4 5#define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__ 6 7#include <linux/string.h> 8#include <linux/net.h> /* struct socket, struct proto_ops */ --- 35 unchanged lines hidden (view full) --- 44static void svc_disconnect(struct atm_vcc *vcc) 45{ 46 DEFINE_WAIT(wait); 47 struct sk_buff *skb; 48 struct sock *sk = sk_atm(vcc); 49 50 pr_debug("%p\n", vcc); 51 if (test_bit(ATM_VF_REGIS, &vcc->flags)) { |
52 prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE); | 52 prepare_to_wait(sk_sleep(sk), &wait, TASK_UNINTERRUPTIBLE); |
53 sigd_enq(vcc, as_close, NULL, NULL, NULL); 54 while (!test_bit(ATM_VF_RELEASED, &vcc->flags) && sigd) { 55 schedule(); | 53 sigd_enq(vcc, as_close, NULL, NULL, NULL); 54 while (!test_bit(ATM_VF_RELEASED, &vcc->flags) && sigd) { 55 schedule(); |
56 prepare_to_wait(sk->sk_sleep, &wait, | 56 prepare_to_wait(sk_sleep(sk), &wait, |
57 TASK_UNINTERRUPTIBLE); 58 } | 57 TASK_UNINTERRUPTIBLE); 58 } |
59 finish_wait(sk->sk_sleep, &wait); | 59 finish_wait(sk_sleep(sk), &wait); |
60 } 61 /* beware - socket is still in use by atmsigd until the last 62 as_indicate has been answered */ 63 while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) { 64 atm_return(vcc, skb->truesize); 65 pr_debug("LISTEN REL\n"); 66 sigd_enq2(NULL, as_reject, vcc, NULL, NULL, &vcc->qos, 0); 67 dev_kfree_skb(skb); --- 52 unchanged lines hidden (view full) --- 120 /* failing rebind will kill old binding */ 121 /* @@@ check memory (de)allocation on rebind */ 122 if (!test_bit(ATM_VF_HASQOS, &vcc->flags)) { 123 error = -EBADFD; 124 goto out; 125 } 126 vcc->local = *addr; 127 set_bit(ATM_VF_WAITING, &vcc->flags); | 60 } 61 /* beware - socket is still in use by atmsigd until the last 62 as_indicate has been answered */ 63 while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) { 64 atm_return(vcc, skb->truesize); 65 pr_debug("LISTEN REL\n"); 66 sigd_enq2(NULL, as_reject, vcc, NULL, NULL, &vcc->qos, 0); 67 dev_kfree_skb(skb); --- 52 unchanged lines hidden (view full) --- 120 /* failing rebind will kill old binding */ 121 /* @@@ check memory (de)allocation on rebind */ 122 if (!test_bit(ATM_VF_HASQOS, &vcc->flags)) { 123 error = -EBADFD; 124 goto out; 125 } 126 vcc->local = *addr; 127 set_bit(ATM_VF_WAITING, &vcc->flags); |
128 prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE); | 128 prepare_to_wait(sk_sleep(sk), &wait, TASK_UNINTERRUPTIBLE); |
129 sigd_enq(vcc, as_bind, NULL, NULL, &vcc->local); 130 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { 131 schedule(); | 129 sigd_enq(vcc, as_bind, NULL, NULL, &vcc->local); 130 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { 131 schedule(); |
132 prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE); | 132 prepare_to_wait(sk_sleep(sk), &wait, TASK_UNINTERRUPTIBLE); |
133 } | 133 } |
134 finish_wait(sk->sk_sleep, &wait); | 134 finish_wait(sk_sleep(sk), &wait); |
135 clear_bit(ATM_VF_REGIS, &vcc->flags); /* doesn't count */ 136 if (!sigd) { 137 error = -EUNATCH; 138 goto out; 139 } 140 if (!sk->sk_err) 141 set_bit(ATM_VF_BOUND, &vcc->flags); 142 error = -sk->sk_err; --- 53 unchanged lines hidden (view full) --- 196 } 197 if (!vcc->qos.txtp.traffic_class && 198 !vcc->qos.rxtp.traffic_class) { 199 error = -EINVAL; 200 goto out; 201 } 202 vcc->remote = *addr; 203 set_bit(ATM_VF_WAITING, &vcc->flags); | 135 clear_bit(ATM_VF_REGIS, &vcc->flags); /* doesn't count */ 136 if (!sigd) { 137 error = -EUNATCH; 138 goto out; 139 } 140 if (!sk->sk_err) 141 set_bit(ATM_VF_BOUND, &vcc->flags); 142 error = -sk->sk_err; --- 53 unchanged lines hidden (view full) --- 196 } 197 if (!vcc->qos.txtp.traffic_class && 198 !vcc->qos.rxtp.traffic_class) { 199 error = -EINVAL; 200 goto out; 201 } 202 vcc->remote = *addr; 203 set_bit(ATM_VF_WAITING, &vcc->flags); |
204 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); | 204 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); |
205 sigd_enq(vcc, as_connect, NULL, NULL, &vcc->remote); 206 if (flags & O_NONBLOCK) { | 205 sigd_enq(vcc, as_connect, NULL, NULL, &vcc->remote); 206 if (flags & O_NONBLOCK) { |
207 finish_wait(sk->sk_sleep, &wait); | 207 finish_wait(sk_sleep(sk), &wait); |
208 sock->state = SS_CONNECTING; 209 error = -EINPROGRESS; 210 goto out; 211 } 212 error = 0; 213 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { 214 schedule(); 215 if (!signal_pending(current)) { | 208 sock->state = SS_CONNECTING; 209 error = -EINPROGRESS; 210 goto out; 211 } 212 error = 0; 213 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { 214 schedule(); 215 if (!signal_pending(current)) { |
216 prepare_to_wait(sk->sk_sleep, &wait, | 216 prepare_to_wait(sk_sleep(sk), &wait, |
217 TASK_INTERRUPTIBLE); 218 continue; 219 } 220 pr_debug("*ABORT*\n"); 221 /* 222 * This is tricky: 223 * Kernel ---close--> Demon 224 * Kernel <--close--- Demon 225 * or 226 * Kernel ---close--> Demon 227 * Kernel <--error--- Demon 228 * or 229 * Kernel ---close--> Demon 230 * Kernel <--okay---- Demon 231 * Kernel <--close--- Demon 232 */ 233 sigd_enq(vcc, as_close, NULL, NULL, NULL); 234 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { | 217 TASK_INTERRUPTIBLE); 218 continue; 219 } 220 pr_debug("*ABORT*\n"); 221 /* 222 * This is tricky: 223 * Kernel ---close--> Demon 224 * Kernel <--close--- Demon 225 * or 226 * Kernel ---close--> Demon 227 * Kernel <--error--- Demon 228 * or 229 * Kernel ---close--> Demon 230 * Kernel <--okay---- Demon 231 * Kernel <--close--- Demon 232 */ 233 sigd_enq(vcc, as_close, NULL, NULL, NULL); 234 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { |
235 prepare_to_wait(sk->sk_sleep, &wait, | 235 prepare_to_wait(sk_sleep(sk), &wait, |
236 TASK_INTERRUPTIBLE); 237 schedule(); 238 } 239 if (!sk->sk_err) 240 while (!test_bit(ATM_VF_RELEASED, &vcc->flags) && 241 sigd) { | 236 TASK_INTERRUPTIBLE); 237 schedule(); 238 } 239 if (!sk->sk_err) 240 while (!test_bit(ATM_VF_RELEASED, &vcc->flags) && 241 sigd) { |
242 prepare_to_wait(sk->sk_sleep, &wait, | 242 prepare_to_wait(sk_sleep(sk), &wait, |
243 TASK_INTERRUPTIBLE); 244 schedule(); 245 } 246 clear_bit(ATM_VF_REGIS, &vcc->flags); 247 clear_bit(ATM_VF_RELEASED, &vcc->flags); 248 clear_bit(ATM_VF_CLOSE, &vcc->flags); 249 /* we're gone now but may connect later */ 250 error = -EINTR; 251 break; 252 } | 243 TASK_INTERRUPTIBLE); 244 schedule(); 245 } 246 clear_bit(ATM_VF_REGIS, &vcc->flags); 247 clear_bit(ATM_VF_RELEASED, &vcc->flags); 248 clear_bit(ATM_VF_CLOSE, &vcc->flags); 249 /* we're gone now but may connect later */ 250 error = -EINTR; 251 break; 252 } |
253 finish_wait(sk->sk_sleep, &wait); | 253 finish_wait(sk_sleep(sk), &wait); |
254 if (error) 255 goto out; 256 if (!sigd) { 257 error = -EUNATCH; 258 goto out; 259 } 260 if (sk->sk_err) { 261 error = -sk->sk_err; --- 35 unchanged lines hidden (view full) --- 297 error = -EINVAL; 298 goto out; 299 } 300 if (test_bit(ATM_VF_LISTEN, &vcc->flags)) { 301 error = -EADDRINUSE; 302 goto out; 303 } 304 set_bit(ATM_VF_WAITING, &vcc->flags); | 254 if (error) 255 goto out; 256 if (!sigd) { 257 error = -EUNATCH; 258 goto out; 259 } 260 if (sk->sk_err) { 261 error = -sk->sk_err; --- 35 unchanged lines hidden (view full) --- 297 error = -EINVAL; 298 goto out; 299 } 300 if (test_bit(ATM_VF_LISTEN, &vcc->flags)) { 301 error = -EADDRINUSE; 302 goto out; 303 } 304 set_bit(ATM_VF_WAITING, &vcc->flags); |
305 prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE); | 305 prepare_to_wait(sk_sleep(sk), &wait, TASK_UNINTERRUPTIBLE); |
306 sigd_enq(vcc, as_listen, NULL, NULL, &vcc->local); 307 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { 308 schedule(); | 306 sigd_enq(vcc, as_listen, NULL, NULL, &vcc->local); 307 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { 308 schedule(); |
309 prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE); | 309 prepare_to_wait(sk_sleep(sk), &wait, TASK_UNINTERRUPTIBLE); |
310 } | 310 } |
311 finish_wait(sk->sk_sleep, &wait); | 311 finish_wait(sk_sleep(sk), &wait); |
312 if (!sigd) { 313 error = -EUNATCH; 314 goto out; 315 } 316 set_bit(ATM_VF_LISTEN, &vcc->flags); 317 vcc_insert_socket(sk); 318 sk->sk_max_ack_backlog = backlog > 0 ? backlog : ATM_BACKLOG_DEFAULT; 319 error = -sk->sk_err; --- 18 unchanged lines hidden (view full) --- 338 goto out; 339 340 new_vcc = ATM_SD(newsock); 341 342 pr_debug("%p -> %p\n", old_vcc, new_vcc); 343 while (1) { 344 DEFINE_WAIT(wait); 345 | 312 if (!sigd) { 313 error = -EUNATCH; 314 goto out; 315 } 316 set_bit(ATM_VF_LISTEN, &vcc->flags); 317 vcc_insert_socket(sk); 318 sk->sk_max_ack_backlog = backlog > 0 ? backlog : ATM_BACKLOG_DEFAULT; 319 error = -sk->sk_err; --- 18 unchanged lines hidden (view full) --- 338 goto out; 339 340 new_vcc = ATM_SD(newsock); 341 342 pr_debug("%p -> %p\n", old_vcc, new_vcc); 343 while (1) { 344 DEFINE_WAIT(wait); 345 |
346 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); | 346 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); |
347 while (!(skb = skb_dequeue(&sk->sk_receive_queue)) && 348 sigd) { 349 if (test_bit(ATM_VF_RELEASED, &old_vcc->flags)) 350 break; 351 if (test_bit(ATM_VF_CLOSE, &old_vcc->flags)) { 352 error = -sk->sk_err; 353 break; 354 } 355 if (flags & O_NONBLOCK) { 356 error = -EAGAIN; 357 break; 358 } 359 release_sock(sk); 360 schedule(); 361 lock_sock(sk); 362 if (signal_pending(current)) { 363 error = -ERESTARTSYS; 364 break; 365 } | 347 while (!(skb = skb_dequeue(&sk->sk_receive_queue)) && 348 sigd) { 349 if (test_bit(ATM_VF_RELEASED, &old_vcc->flags)) 350 break; 351 if (test_bit(ATM_VF_CLOSE, &old_vcc->flags)) { 352 error = -sk->sk_err; 353 break; 354 } 355 if (flags & O_NONBLOCK) { 356 error = -EAGAIN; 357 break; 358 } 359 release_sock(sk); 360 schedule(); 361 lock_sock(sk); 362 if (signal_pending(current)) { 363 error = -ERESTARTSYS; 364 break; 365 } |
366 prepare_to_wait(sk->sk_sleep, &wait, | 366 prepare_to_wait(sk_sleep(sk), &wait, |
367 TASK_INTERRUPTIBLE); 368 } | 367 TASK_INTERRUPTIBLE); 368 } |
369 finish_wait(sk->sk_sleep, &wait); | 369 finish_wait(sk_sleep(sk), &wait); |
370 if (error) 371 goto out; 372 if (!skb) { 373 error = -EUNATCH; 374 goto out; 375 } 376 msg = (struct atmsvc_msg *)skb->data; 377 new_vcc->qos = msg->qos; --- 9 unchanged lines hidden (view full) --- 387 if (error) { 388 sigd_enq2(NULL, as_reject, old_vcc, NULL, NULL, 389 &old_vcc->qos, error); 390 error = error == -EAGAIN ? -EBUSY : error; 391 goto out; 392 } 393 /* wait should be short, so we ignore the non-blocking flag */ 394 set_bit(ATM_VF_WAITING, &new_vcc->flags); | 370 if (error) 371 goto out; 372 if (!skb) { 373 error = -EUNATCH; 374 goto out; 375 } 376 msg = (struct atmsvc_msg *)skb->data; 377 new_vcc->qos = msg->qos; --- 9 unchanged lines hidden (view full) --- 387 if (error) { 388 sigd_enq2(NULL, as_reject, old_vcc, NULL, NULL, 389 &old_vcc->qos, error); 390 error = error == -EAGAIN ? -EBUSY : error; 391 goto out; 392 } 393 /* wait should be short, so we ignore the non-blocking flag */ 394 set_bit(ATM_VF_WAITING, &new_vcc->flags); |
395 prepare_to_wait(sk_atm(new_vcc)->sk_sleep, &wait, | 395 prepare_to_wait(sk_sleep(sk_atm(new_vcc)), &wait, |
396 TASK_UNINTERRUPTIBLE); 397 sigd_enq(new_vcc, as_accept, old_vcc, NULL, NULL); 398 while (test_bit(ATM_VF_WAITING, &new_vcc->flags) && sigd) { 399 release_sock(sk); 400 schedule(); 401 lock_sock(sk); | 396 TASK_UNINTERRUPTIBLE); 397 sigd_enq(new_vcc, as_accept, old_vcc, NULL, NULL); 398 while (test_bit(ATM_VF_WAITING, &new_vcc->flags) && sigd) { 399 release_sock(sk); 400 schedule(); 401 lock_sock(sk); |
402 prepare_to_wait(sk_atm(new_vcc)->sk_sleep, &wait, | 402 prepare_to_wait(sk_sleep(sk_atm(new_vcc)), &wait, |
403 TASK_UNINTERRUPTIBLE); 404 } | 403 TASK_UNINTERRUPTIBLE); 404 } |
405 finish_wait(sk_atm(new_vcc)->sk_sleep, &wait); | 405 finish_wait(sk_sleep(sk_atm(new_vcc)), &wait); |
406 if (!sigd) { 407 error = -EUNATCH; 408 goto out; 409 } 410 if (!sk_atm(new_vcc)->sk_err) 411 break; 412 if (sk_atm(new_vcc)->sk_err != ERESTARTSYS) { 413 error = -sk_atm(new_vcc)->sk_err; --- 19 unchanged lines hidden (view full) --- 433} 434 435int svc_change_qos(struct atm_vcc *vcc, struct atm_qos *qos) 436{ 437 struct sock *sk = sk_atm(vcc); 438 DEFINE_WAIT(wait); 439 440 set_bit(ATM_VF_WAITING, &vcc->flags); | 406 if (!sigd) { 407 error = -EUNATCH; 408 goto out; 409 } 410 if (!sk_atm(new_vcc)->sk_err) 411 break; 412 if (sk_atm(new_vcc)->sk_err != ERESTARTSYS) { 413 error = -sk_atm(new_vcc)->sk_err; --- 19 unchanged lines hidden (view full) --- 433} 434 435int svc_change_qos(struct atm_vcc *vcc, struct atm_qos *qos) 436{ 437 struct sock *sk = sk_atm(vcc); 438 DEFINE_WAIT(wait); 439 440 set_bit(ATM_VF_WAITING, &vcc->flags); |
441 prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE); | 441 prepare_to_wait(sk_sleep(sk), &wait, TASK_UNINTERRUPTIBLE); |
442 sigd_enq2(vcc, as_modify, NULL, NULL, &vcc->local, qos, 0); 443 while (test_bit(ATM_VF_WAITING, &vcc->flags) && 444 !test_bit(ATM_VF_RELEASED, &vcc->flags) && sigd) { 445 schedule(); | 442 sigd_enq2(vcc, as_modify, NULL, NULL, &vcc->local, qos, 0); 443 while (test_bit(ATM_VF_WAITING, &vcc->flags) && 444 !test_bit(ATM_VF_RELEASED, &vcc->flags) && sigd) { 445 schedule(); |
446 prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE); | 446 prepare_to_wait(sk_sleep(sk), &wait, TASK_UNINTERRUPTIBLE); |
447 } | 447 } |
448 finish_wait(sk->sk_sleep, &wait); | 448 finish_wait(sk_sleep(sk), &wait); |
449 if (!sigd) 450 return -EUNATCH; 451 return -sk->sk_err; 452} 453 454static int svc_setsockopt(struct socket *sock, int level, int optname, 455 char __user *optval, unsigned int optlen) 456{ --- 72 unchanged lines hidden (view full) --- 529{ 530 DEFINE_WAIT(wait); 531 struct sock *sk = sock->sk; 532 struct atm_vcc *vcc = ATM_SD(sock); 533 int error; 534 535 lock_sock(sk); 536 set_bit(ATM_VF_WAITING, &vcc->flags); | 449 if (!sigd) 450 return -EUNATCH; 451 return -sk->sk_err; 452} 453 454static int svc_setsockopt(struct socket *sock, int level, int optname, 455 char __user *optval, unsigned int optlen) 456{ --- 72 unchanged lines hidden (view full) --- 529{ 530 DEFINE_WAIT(wait); 531 struct sock *sk = sock->sk; 532 struct atm_vcc *vcc = ATM_SD(sock); 533 int error; 534 535 lock_sock(sk); 536 set_bit(ATM_VF_WAITING, &vcc->flags); |
537 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); | 537 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); |
538 sigd_enq(vcc, as_addparty, NULL, NULL, 539 (struct sockaddr_atmsvc *) sockaddr); 540 if (flags & O_NONBLOCK) { | 538 sigd_enq(vcc, as_addparty, NULL, NULL, 539 (struct sockaddr_atmsvc *) sockaddr); 540 if (flags & O_NONBLOCK) { |
541 finish_wait(sk->sk_sleep, &wait); | 541 finish_wait(sk_sleep(sk), &wait); |
542 error = -EINPROGRESS; 543 goto out; 544 } 545 pr_debug("added wait queue\n"); 546 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { 547 schedule(); | 542 error = -EINPROGRESS; 543 goto out; 544 } 545 pr_debug("added wait queue\n"); 546 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { 547 schedule(); |
548 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); | 548 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); |
549 } | 549 } |
550 finish_wait(sk->sk_sleep, &wait); | 550 finish_wait(sk_sleep(sk), &wait); |
551 error = xchg(&sk->sk_err_soft, 0); 552out: 553 release_sock(sk); 554 return error; 555} 556 557static int svc_dropparty(struct socket *sock, int ep_ref) 558{ 559 DEFINE_WAIT(wait); 560 struct sock *sk = sock->sk; 561 struct atm_vcc *vcc = ATM_SD(sock); 562 int error; 563 564 lock_sock(sk); 565 set_bit(ATM_VF_WAITING, &vcc->flags); | 551 error = xchg(&sk->sk_err_soft, 0); 552out: 553 release_sock(sk); 554 return error; 555} 556 557static int svc_dropparty(struct socket *sock, int ep_ref) 558{ 559 DEFINE_WAIT(wait); 560 struct sock *sk = sock->sk; 561 struct atm_vcc *vcc = ATM_SD(sock); 562 int error; 563 564 lock_sock(sk); 565 set_bit(ATM_VF_WAITING, &vcc->flags); |
566 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); | 566 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); |
567 sigd_enq2(vcc, as_dropparty, NULL, NULL, NULL, NULL, ep_ref); 568 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { 569 schedule(); | 567 sigd_enq2(vcc, as_dropparty, NULL, NULL, NULL, NULL, ep_ref); 568 while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) { 569 schedule(); |
570 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); | 570 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); |
571 } | 571 } |
572 finish_wait(sk->sk_sleep, &wait); | 572 finish_wait(sk_sleep(sk), &wait); |
573 if (!sigd) { 574 error = -EUNATCH; 575 goto out; 576 } 577 error = xchg(&sk->sk_err_soft, 0); 578out: 579 release_sock(sk); 580 return error; --- 111 unchanged lines hidden --- | 573 if (!sigd) { 574 error = -EUNATCH; 575 goto out; 576 } 577 error = xchg(&sk->sk_err_soft, 0); 578out: 579 release_sock(sk); 580 return error; --- 111 unchanged lines hidden --- |