提交 5c0c52c9 编写于 作者: M Michael S. Tsirkin 提交者: David S. Miller

tun: don't look at current when non-blocking

We play with a wait queue even if socket is
non blocking. This is an obvious waste.
Besides, it will prevent calling the non blocking
variant when current is not valid.
Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
Acked-by: NJason Wang <jasowang@redhat.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 66e358a8
...@@ -1293,7 +1293,8 @@ static ssize_t tun_do_read(struct tun_struct *tun, struct tun_file *tfile, ...@@ -1293,7 +1293,8 @@ static ssize_t tun_do_read(struct tun_struct *tun, struct tun_file *tfile,
if (unlikely(!noblock)) if (unlikely(!noblock))
add_wait_queue(&tfile->wq.wait, &wait); add_wait_queue(&tfile->wq.wait, &wait);
while (len) { while (len) {
current->state = TASK_INTERRUPTIBLE; if (unlikely(!noblock))
current->state = TASK_INTERRUPTIBLE;
/* Read frames from the queue */ /* Read frames from the queue */
if (!(skb = skb_dequeue(&tfile->socket.sk->sk_receive_queue))) { if (!(skb = skb_dequeue(&tfile->socket.sk->sk_receive_queue))) {
...@@ -1320,9 +1321,10 @@ static ssize_t tun_do_read(struct tun_struct *tun, struct tun_file *tfile, ...@@ -1320,9 +1321,10 @@ static ssize_t tun_do_read(struct tun_struct *tun, struct tun_file *tfile,
break; break;
} }
current->state = TASK_RUNNING; if (unlikely(!noblock)) {
if (unlikely(!noblock)) current->state = TASK_RUNNING;
remove_wait_queue(&tfile->wq.wait, &wait); remove_wait_queue(&tfile->wq.wait, &wait);
}
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册