[NETLINK]: Avoid pointer in netlink_run_queue
I was looking at Patrick's fix to inet_diag and it occured to me that we're using a pointer argument to return values unnecessarily in netlink_run_queue. Changing it to return the value will allow the compiler to generate better code since the value won't have to be memory-backed. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
007e3936bd
commit
0cfad07555
@ -1629,7 +1629,7 @@ skip:
|
||||
/**
|
||||
* nelink_run_queue - Process netlink receive queue.
|
||||
* @sk: Netlink socket containing the queue
|
||||
* @qlen: Place to store queue length upon entry
|
||||
* @qlen: Initial queue length
|
||||
* @cb: Callback function invoked for each netlink message found
|
||||
*
|
||||
* Processes as much as there was in the queue upon entry and invokes
|
||||
@ -1639,35 +1639,37 @@ skip:
|
||||
* returns with a qlen != 0.
|
||||
*
|
||||
* qlen must be initialized to 0 before the initial entry, afterwards
|
||||
* the function may be called repeatedly until qlen reaches 0.
|
||||
* the function may be called repeatedly until the returned qlen is 0.
|
||||
*
|
||||
* The callback function may return -EINTR to signal that processing
|
||||
* of netlink messages shall be interrupted. In this case the message
|
||||
* currently being processed will NOT be requeued onto the receive
|
||||
* queue.
|
||||
*/
|
||||
void netlink_run_queue(struct sock *sk, unsigned int *qlen,
|
||||
int (*cb)(struct sk_buff *, struct nlmsghdr *))
|
||||
unsigned int netlink_run_queue(struct sock *sk, unsigned int qlen,
|
||||
int (*cb)(struct sk_buff *, struct nlmsghdr *))
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
if (!*qlen || *qlen > skb_queue_len(&sk->sk_receive_queue))
|
||||
*qlen = skb_queue_len(&sk->sk_receive_queue);
|
||||
if (!qlen || qlen > skb_queue_len(&sk->sk_receive_queue))
|
||||
qlen = skb_queue_len(&sk->sk_receive_queue);
|
||||
|
||||
for (; *qlen; (*qlen)--) {
|
||||
for (; qlen; qlen--) {
|
||||
skb = skb_dequeue(&sk->sk_receive_queue);
|
||||
if (netlink_rcv_skb(skb, cb)) {
|
||||
if (skb->len)
|
||||
skb_queue_head(&sk->sk_receive_queue, skb);
|
||||
else {
|
||||
kfree_skb(skb);
|
||||
(*qlen)--;
|
||||
qlen--;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
kfree_skb(skb);
|
||||
}
|
||||
|
||||
return qlen;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user