diff options
Diffstat (limited to 'net/sunrpc/svcsock.c')
| -rw-r--r-- | net/sunrpc/svcsock.c | 41 |
1 files changed, 14 insertions, 27 deletions
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 870929e08e5d..7e534dd09077 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
| @@ -150,7 +150,6 @@ static void svc_set_cmsg_data(struct svc_rqst *rqstp, struct cmsghdr *cmh) | |||
| 150 | } | 150 | } |
| 151 | break; | 151 | break; |
| 152 | } | 152 | } |
| 153 | return; | ||
| 154 | } | 153 | } |
| 155 | 154 | ||
| 156 | /* | 155 | /* |
| @@ -419,8 +418,8 @@ static void svc_udp_data_ready(struct sock *sk, int count) | |||
| 419 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); | 418 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); |
| 420 | svc_xprt_enqueue(&svsk->sk_xprt); | 419 | svc_xprt_enqueue(&svsk->sk_xprt); |
| 421 | } | 420 | } |
| 422 | if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) | 421 | if (sk_sleep(sk) && waitqueue_active(sk_sleep(sk))) |
| 423 | wake_up_interruptible(sk->sk_sleep); | 422 | wake_up_interruptible(sk_sleep(sk)); |
| 424 | } | 423 | } |
| 425 | 424 | ||
| 426 | /* | 425 | /* |
| @@ -436,10 +435,10 @@ static void svc_write_space(struct sock *sk) | |||
| 436 | svc_xprt_enqueue(&svsk->sk_xprt); | 435 | svc_xprt_enqueue(&svsk->sk_xprt); |
| 437 | } | 436 | } |
| 438 | 437 | ||
| 439 | if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) { | 438 | if (sk_sleep(sk) && waitqueue_active(sk_sleep(sk))) { |
| 440 | dprintk("RPC svc_write_space: someone sleeping on %p\n", | 439 | dprintk("RPC svc_write_space: someone sleeping on %p\n", |
| 441 | svsk); | 440 | svsk); |
| 442 | wake_up_interruptible(sk->sk_sleep); | 441 | wake_up_interruptible(sk_sleep(sk)); |
| 443 | } | 442 | } |
| 444 | } | 443 | } |
| 445 | 444 | ||
| @@ -547,7 +546,6 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp) | |||
| 547 | dprintk("svc: recvfrom returned error %d\n", -err); | 546 | dprintk("svc: recvfrom returned error %d\n", -err); |
| 548 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); | 547 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); |
| 549 | } | 548 | } |
| 550 | svc_xprt_received(&svsk->sk_xprt); | ||
| 551 | return -EAGAIN; | 549 | return -EAGAIN; |
| 552 | } | 550 | } |
| 553 | len = svc_addr_len(svc_addr(rqstp)); | 551 | len = svc_addr_len(svc_addr(rqstp)); |
| @@ -562,11 +560,6 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp) | |||
| 562 | svsk->sk_sk->sk_stamp = skb->tstamp; | 560 | svsk->sk_sk->sk_stamp = skb->tstamp; |
| 563 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); /* there may be more data... */ | 561 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); /* there may be more data... */ |
| 564 | 562 | ||
| 565 | /* | ||
| 566 | * Maybe more packets - kick another thread ASAP. | ||
| 567 | */ | ||
| 568 | svc_xprt_received(&svsk->sk_xprt); | ||
| 569 | |||
| 570 | len = skb->len - sizeof(struct udphdr); | 563 | len = skb->len - sizeof(struct udphdr); |
| 571 | rqstp->rq_arg.len = len; | 564 | rqstp->rq_arg.len = len; |
| 572 | 565 | ||
| @@ -757,8 +750,8 @@ static void svc_tcp_listen_data_ready(struct sock *sk, int count_unused) | |||
| 757 | printk("svc: socket %p: no user data\n", sk); | 750 | printk("svc: socket %p: no user data\n", sk); |
| 758 | } | 751 | } |
| 759 | 752 | ||
| 760 | if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) | 753 | if (sk_sleep(sk) && waitqueue_active(sk_sleep(sk))) |
| 761 | wake_up_interruptible_all(sk->sk_sleep); | 754 | wake_up_interruptible_all(sk_sleep(sk)); |
| 762 | } | 755 | } |
| 763 | 756 | ||
| 764 | /* | 757 | /* |
| @@ -777,8 +770,8 @@ static void svc_tcp_state_change(struct sock *sk) | |||
| 777 | set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); | 770 | set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); |
| 778 | svc_xprt_enqueue(&svsk->sk_xprt); | 771 | svc_xprt_enqueue(&svsk->sk_xprt); |
| 779 | } | 772 | } |
| 780 | if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) | 773 | if (sk_sleep(sk) && waitqueue_active(sk_sleep(sk))) |
| 781 | wake_up_interruptible_all(sk->sk_sleep); | 774 | wake_up_interruptible_all(sk_sleep(sk)); |
| 782 | } | 775 | } |
| 783 | 776 | ||
| 784 | static void svc_tcp_data_ready(struct sock *sk, int count) | 777 | static void svc_tcp_data_ready(struct sock *sk, int count) |
| @@ -791,8 +784,8 @@ static void svc_tcp_data_ready(struct sock *sk, int count) | |||
| 791 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); | 784 | set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); |
| 792 | svc_xprt_enqueue(&svsk->sk_xprt); | 785 | svc_xprt_enqueue(&svsk->sk_xprt); |
| 793 | } | 786 | } |
| 794 | if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) | 787 | if (sk_sleep(sk) && waitqueue_active(sk_sleep(sk))) |
| 795 | wake_up_interruptible(sk->sk_sleep); | 788 | wake_up_interruptible(sk_sleep(sk)); |
| 796 | } | 789 | } |
| 797 | 790 | ||
| 798 | /* | 791 | /* |
| @@ -917,7 +910,6 @@ static int svc_tcp_recv_record(struct svc_sock *svsk, struct svc_rqst *rqstp) | |||
| 917 | if (len < want) { | 910 | if (len < want) { |
| 918 | dprintk("svc: short recvfrom while reading record " | 911 | dprintk("svc: short recvfrom while reading record " |
| 919 | "length (%d of %d)\n", len, want); | 912 | "length (%d of %d)\n", len, want); |
| 920 | svc_xprt_received(&svsk->sk_xprt); | ||
| 921 | goto err_again; /* record header not complete */ | 913 | goto err_again; /* record header not complete */ |
| 922 | } | 914 | } |
| 923 | 915 | ||
| @@ -953,7 +945,6 @@ static int svc_tcp_recv_record(struct svc_sock *svsk, struct svc_rqst *rqstp) | |||
| 953 | if (len < svsk->sk_reclen) { | 945 | if (len < svsk->sk_reclen) { |
| 954 | dprintk("svc: incomplete TCP record (%d of %d)\n", | 946 | dprintk("svc: incomplete TCP record (%d of %d)\n", |
| 955 | len, svsk->sk_reclen); | 947 | len, svsk->sk_reclen); |
| 956 | svc_xprt_received(&svsk->sk_xprt); | ||
| 957 | goto err_again; /* record not complete */ | 948 | goto err_again; /* record not complete */ |
| 958 | } | 949 | } |
| 959 | len = svsk->sk_reclen; | 950 | len = svsk->sk_reclen; |
| @@ -961,10 +952,8 @@ static int svc_tcp_recv_record(struct svc_sock *svsk, struct svc_rqst *rqstp) | |||
| 961 | 952 | ||
| 962 | return len; | 953 | return len; |
| 963 | error: | 954 | error: |
| 964 | if (len == -EAGAIN) { | 955 | if (len == -EAGAIN) |
| 965 | dprintk("RPC: TCP recv_record got EAGAIN\n"); | 956 | dprintk("RPC: TCP recv_record got EAGAIN\n"); |
| 966 | svc_xprt_received(&svsk->sk_xprt); | ||
| 967 | } | ||
| 968 | return len; | 957 | return len; |
| 969 | err_delete: | 958 | err_delete: |
| 970 | set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); | 959 | set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); |
| @@ -1109,7 +1098,6 @@ out: | |||
| 1109 | svsk->sk_tcplen = 0; | 1098 | svsk->sk_tcplen = 0; |
| 1110 | 1099 | ||
| 1111 | svc_xprt_copy_addrs(rqstp, &svsk->sk_xprt); | 1100 | svc_xprt_copy_addrs(rqstp, &svsk->sk_xprt); |
| 1112 | svc_xprt_received(&svsk->sk_xprt); | ||
| 1113 | if (serv->sv_stats) | 1101 | if (serv->sv_stats) |
| 1114 | serv->sv_stats->nettcpcnt++; | 1102 | serv->sv_stats->nettcpcnt++; |
| 1115 | 1103 | ||
| @@ -1118,7 +1106,6 @@ out: | |||
| 1118 | err_again: | 1106 | err_again: |
| 1119 | if (len == -EAGAIN) { | 1107 | if (len == -EAGAIN) { |
| 1120 | dprintk("RPC: TCP recvfrom got EAGAIN\n"); | 1108 | dprintk("RPC: TCP recvfrom got EAGAIN\n"); |
| 1121 | svc_xprt_received(&svsk->sk_xprt); | ||
| 1122 | return len; | 1109 | return len; |
| 1123 | } | 1110 | } |
| 1124 | error: | 1111 | error: |
| @@ -1357,7 +1344,7 @@ int svc_addsock(struct svc_serv *serv, const int fd, char *name_return, | |||
| 1357 | 1344 | ||
| 1358 | if (!so) | 1345 | if (!so) |
| 1359 | return err; | 1346 | return err; |
| 1360 | if (so->sk->sk_family != AF_INET) | 1347 | if ((so->sk->sk_family != PF_INET) && (so->sk->sk_family != PF_INET6)) |
| 1361 | err = -EAFNOSUPPORT; | 1348 | err = -EAFNOSUPPORT; |
| 1362 | else if (so->sk->sk_protocol != IPPROTO_TCP && | 1349 | else if (so->sk->sk_protocol != IPPROTO_TCP && |
| 1363 | so->sk->sk_protocol != IPPROTO_UDP) | 1350 | so->sk->sk_protocol != IPPROTO_UDP) |
| @@ -1493,8 +1480,8 @@ static void svc_sock_detach(struct svc_xprt *xprt) | |||
| 1493 | sk->sk_data_ready = svsk->sk_odata; | 1480 | sk->sk_data_ready = svsk->sk_odata; |
| 1494 | sk->sk_write_space = svsk->sk_owspace; | 1481 | sk->sk_write_space = svsk->sk_owspace; |
| 1495 | 1482 | ||
| 1496 | if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) | 1483 | if (sk_sleep(sk) && waitqueue_active(sk_sleep(sk))) |
| 1497 | wake_up_interruptible(sk->sk_sleep); | 1484 | wake_up_interruptible(sk_sleep(sk)); |
| 1498 | } | 1485 | } |
| 1499 | 1486 | ||
| 1500 | /* | 1487 | /* |
