diff options
author | NeilBrown <neilb@suse.de> | 2007-05-09 05:34:55 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-09 15:30:54 -0400 |
commit | 05ed690efbb28b54af79f97af8c9705e82a6fbd7 (patch) | |
tree | f6c5a437cb8f8c0a666cd1f1a13e39d1fa354146 /net/sunrpc/svcsock.c | |
parent | c5e434c98b49f4877ea1614a629499e082b1a818 (diff) |
knfsd: simplify a 'while' condition in svcsock.c
This while loop has an overly complex condition, which performs a couple of
assignments. This hurts readability.
We don't really need a loop at all. We can just return -EAGAIN and (providing
we set SK_DATA), the function will be called again.
So discard the loop, make the complex conditional become a few clear function
calls, and hopefully improve readability.
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'net/sunrpc/svcsock.c')
-rw-r--r-- | net/sunrpc/svcsock.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index fdb1386f5dcd..5baf48de2558 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
@@ -788,15 +788,20 @@ svc_udp_recvfrom(struct svc_rqst *rqstp) | |||
788 | } | 788 | } |
789 | 789 | ||
790 | clear_bit(SK_DATA, &svsk->sk_flags); | 790 | clear_bit(SK_DATA, &svsk->sk_flags); |
791 | while ((err = kernel_recvmsg(svsk->sk_sock, &msg, NULL, | 791 | skb = NULL; |
792 | 0, 0, MSG_PEEK | MSG_DONTWAIT)) < 0 || | 792 | err = kernel_recvmsg(svsk->sk_sock, &msg, NULL, |
793 | (skb = skb_recv_datagram(svsk->sk_sk, 0, 1, &err)) == NULL) { | 793 | 0, 0, MSG_PEEK | MSG_DONTWAIT); |
794 | if (err == -EAGAIN) { | 794 | if (err >= 0) |
795 | svc_sock_received(svsk); | 795 | skb = skb_recv_datagram(svsk->sk_sk, 0, 1, &err); |
796 | return err; | 796 | |
797 | if (skb == NULL) { | ||
798 | if (err != -EAGAIN) { | ||
799 | /* possibly an icmp error */ | ||
800 | dprintk("svc: recvfrom returned error %d\n", -err); | ||
801 | set_bit(SK_DATA, &svsk->sk_flags); | ||
797 | } | 802 | } |
798 | /* possibly an icmp error */ | 803 | svc_sock_received(svsk); |
799 | dprintk("svc: recvfrom returned error %d\n", -err); | 804 | return -EAGAIN; |
800 | } | 805 | } |
801 | rqstp->rq_addrlen = sizeof(rqstp->rq_addr); | 806 | rqstp->rq_addrlen = sizeof(rqstp->rq_addr); |
802 | if (skb->tstamp.tv64 == 0) { | 807 | if (skb->tstamp.tv64 == 0) { |