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>
This commit is contained in:
Родитель
c5e434c98b
Коммит
05ed690efb
|
@ -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) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче