From f130c141f6c6115b28b4a8ca3b86c7311f72d333 Mon Sep 17 00:00:00 2001 From: James Morris Date: Sun, 23 Feb 2003 06:14:23 -0800 Subject: [PATCH] [NETLINK]: Un-duplicate rcv wakeup logic. --- net/netlink/af_netlink.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 71f8c8fccb3ad..ebb013257f4f1 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -585,6 +585,16 @@ void netlink_set_err(struct sock *ssk, u32 pid, u32 group, int code) 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) @@ -706,10 +716,7 @@ static int netlink_recvmsg(struct kiocb *iocb, struct socket *sock, 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; } @@ -719,11 +726,7 @@ void netlink_data_ready(struct sock *sk, int len) 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); } /* -- 2.53.0