read_unlock(&nl_table_lock);
}
+static inline void netlink_rcv_wake(struct sock *sk)
+{
+ struct netlink_opt *nlk = nlk_sk(sk);
+
+ if (skb_queue_len(&sk->receive_queue) == 0)
+ clear_bit(0, &nlk->state);
+ if (!test_bit(0, &nlk->state))
+ wake_up_interruptible(&nlk->wait);
+}
+
static int netlink_sendmsg(struct kiocb *iocb, struct socket *sock,
struct msghdr *msg, int len,
struct scm_cookie *scm)
netlink_dump(sk);
out:
- if (skb_queue_len(&sk->receive_queue) == 0)
- clear_bit(0, &nlk->state);
- if (!test_bit(0, &nlk->state))
- wake_up_interruptible(&nlk->wait);
+ netlink_rcv_wake(sk);
return err ? : copied;
}
if (nlk->data_ready)
nlk->data_ready(sk, len);
-
- if (skb_queue_len(&sk->receive_queue) == 0)
- clear_bit(0, &nlk->state);
- if (!test_bit(0, &nlk->state))
- wake_up_interruptible(&nlk->wait);
+ netlink_rcv_wake(sk);
}
/*