All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rémi Denis-Courmont" <remi@remlab.net>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: netdev@vger.kernel.org, Sakari Ailus <sakari.ailus@nokia.com>,
	Remi Denis-Courmont <courmisch@gmail.com>,
	Johannes Berg <johannes.berg@intel.com>
Subject: Re: [PATCH] phonet netlink: allow multiple messages per skb in route dump
Date: Mon, 19 Jan 2015 22:11:50 +0200	[thread overview]
Message-ID: <45863435.BJJN05sX3K@philogene> (raw)
In-Reply-To: <1421666124-16055-1-git-send-email-johannes@sipsolutions.net>

Le lundi 19 janvier 2015, 12:15:24 Johannes Berg a écrit :
> From: Johannes Berg <johannes.berg@intel.com>
> 
> 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.

The canonical userspace is there (specifically src/pnroute.c):
https://gitorious.org/meego-cellular/phonet-utils/

AFAICT, it should work either way. By now, I expect what's left of the 
Maemo/Meego/Mer/whatever community has forked or rewritten it though.

> 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 <johannes.berg@intel.com>
> ---
>  net/phonet/pn_netlink.c | 22 +++++++---------------
>  1 file changed, 7 insertions(+), 15 deletions(-)
> 
> diff --git a/net/phonet/pn_netlink.c b/net/phonet/pn_netlink.c
> index 54d766842c2b..bc5ee5fbe6ae 100644
> --- a/net/phonet/pn_netlink.c
> +++ b/net/phonet/pn_netlink.c
> @@ -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;
>  }

-- 
Rémi

  reply	other threads:[~2015-01-19 20:19 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-19 11:15 [PATCH] phonet netlink: allow multiple messages per skb in route dump Johannes Berg
2015-01-19 20:11 ` Rémi Denis-Courmont [this message]
2015-01-19 20:14   ` Johannes Berg
2015-01-19 21:20 ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45863435.BJJN05sX3K@philogene \
    --to=remi@remlab.net \
    --cc=courmisch@gmail.com \
    --cc=johannes.berg@intel.com \
    --cc=johannes@sipsolutions.net \
    --cc=netdev@vger.kernel.org \
    --cc=sakari.ailus@nokia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.