|
@@ -847,13 +847,12 @@ static ssize_t macvtap_do_read(struct macvtap_queue *q, struct kiocb *iocb,
|
|
const struct iovec *iv, unsigned long len,
|
|
const struct iovec *iv, unsigned long len,
|
|
int noblock)
|
|
int noblock)
|
|
{
|
|
{
|
|
- DECLARE_WAITQUEUE(wait, current);
|
|
|
|
|
|
+ DEFINE_WAIT(wait);
|
|
struct sk_buff *skb;
|
|
struct sk_buff *skb;
|
|
ssize_t ret = 0;
|
|
ssize_t ret = 0;
|
|
|
|
|
|
- add_wait_queue(sk_sleep(&q->sk), &wait);
|
|
|
|
while (len) {
|
|
while (len) {
|
|
- current->state = TASK_INTERRUPTIBLE;
|
|
|
|
|
|
+ prepare_to_wait(sk_sleep(&q->sk), &wait, TASK_INTERRUPTIBLE);
|
|
|
|
|
|
/* Read frames from the queue */
|
|
/* Read frames from the queue */
|
|
skb = skb_dequeue(&q->sk.sk_receive_queue);
|
|
skb = skb_dequeue(&q->sk.sk_receive_queue);
|
|
@@ -875,8 +874,7 @@ static ssize_t macvtap_do_read(struct macvtap_queue *q, struct kiocb *iocb,
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
- current->state = TASK_RUNNING;
|
|
|
|
- remove_wait_queue(sk_sleep(&q->sk), &wait);
|
|
|
|
|
|
+ finish_wait(sk_sleep(&q->sk), &wait);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|