knfsd: simplify a 'while' condition in svcsock.c
authorNeilBrown <neilb@suse.de>
Wed, 9 May 2007 09:34:55 +0000 (02:34 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Wed, 9 May 2007 19:30:54 +0000 (12:30 -0700)
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>
net/sunrpc/svcsock.c

index fdb1386..5baf48d 100644 (file)
@@ -788,15 +788,20 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
        }
 
        clear_bit(SK_DATA, &svsk->sk_flags);
-       while ((err = kernel_recvmsg(svsk->sk_sock, &msg, NULL,
-                                    0, 0, MSG_PEEK | MSG_DONTWAIT)) < 0 ||
-              (skb = skb_recv_datagram(svsk->sk_sk, 0, 1, &err)) == NULL) {
-               if (err == -EAGAIN) {
-                       svc_sock_received(svsk);
-                       return err;
+       skb = NULL;
+       err = kernel_recvmsg(svsk->sk_sock, &msg, NULL,
+                            0, 0, MSG_PEEK | MSG_DONTWAIT);
+       if (err >= 0)
+               skb = skb_recv_datagram(svsk->sk_sk, 0, 1, &err);
+
+       if (skb == NULL) {
+               if (err != -EAGAIN) {
+                       /* possibly an icmp error */
+                       dprintk("svc: recvfrom returned error %d\n", -err);
+                       set_bit(SK_DATA, &svsk->sk_flags);
                }
-               /* possibly an icmp error */
-               dprintk("svc: recvfrom returned error %d\n", -err);
+               svc_sock_received(svsk);
+               return -EAGAIN;
        }
        rqstp->rq_addrlen = sizeof(rqstp->rq_addr);
        if (skb->tstamp.tv64 == 0) {