aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/svcsock.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sunrpc/svcsock.c')
-rw-r--r--net/sunrpc/svcsock.c41
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
784static void svc_tcp_data_ready(struct sock *sk, int count) 777static 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:
1118err_again: 1106err_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 }
1124error: 1111error:
@@ -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/*