Skip to content

Commit

Permalink
phonet netlink: allow multiple messages per skb in route dump
Browse files Browse the repository at this point in the history
My previous patch to this file changed the code to be bug-compatible
towards userspace. Unless userspace (which I wasn't able to find)
implements the dump reader by hand in a wrong way, this isn't needed.
If it uses libnl or similar code putting multiple messages into a
single SKB is far more efficient.

Change the code to do this. While at it, also clean it up and don't
use so many variables - just store the address in the callback args
directly.

Signed-off-by: Johannes Berg <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
jmberg-intel authored and davem330 committed Jan 19, 2015
1 parent fc83477 commit 926e987
Showing 1 changed file with 7 additions and 15 deletions.
22 changes: 7 additions & 15 deletions net/phonet/pn_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -272,31 +272,23 @@ static int route_doit(struct sk_buff *skb, struct nlmsghdr *nlh)
static int route_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
{
struct net *net = sock_net(skb->sk);
u8 addr, addr_idx = 0, addr_start_idx = cb->args[0];
u8 addr;

rcu_read_lock();
for (addr = 0; addr < 64; addr++) {
struct net_device *dev;
for (addr = cb->args[0]; addr < 64; addr++) {
struct net_device *dev = phonet_route_get_rcu(net, addr << 2);

dev = phonet_route_get_rcu(net, addr << 2);
if (!dev)
continue;

if (addr_idx++ < addr_start_idx)
continue;
fill_route(skb, dev, addr << 2, NETLINK_CB(cb->skb).portid,
cb->nlh->nlmsg_seq, RTM_NEWROUTE);
/* fill_route() used to return > 0 (or negative errors) but
* never 0 - ignore the return value and just go out to
* call dumpit again from outside to preserve the behavior
*/
goto out;
if (fill_route(skb, dev, addr << 2, NETLINK_CB(cb->skb).portid,
cb->nlh->nlmsg_seq, RTM_NEWROUTE) < 0)
goto out;
}

out:
rcu_read_unlock();
cb->args[0] = addr_idx;
cb->args[1] = 0;
cb->args[0] = addr;

return skb->len;
}
Expand Down

0 comments on commit 926e987

Please sign in to comment.