All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nicolas de Pesloüan" <nicolas.2p.debian@gmail.com>
To: Jiri Pirko <jpirko@redhat.com>
Cc: netdev@vger.kernel.org, davem@davemloft.net,
	shemminger@linux-foundation.org, kaber@trash.net,
	fubar@us.ibm.com, eric.dumazet@gmail.com, andy@greyhouse.net
Subject: Re: [patch net-next-2.6 2/8] bonding: register slave pointer for rx_handler
Date: Sat, 05 Mar 2011 15:38:32 +0100	[thread overview]
Message-ID: <4D724AE8.6050107@gmail.com> (raw)
In-Reply-To: <20110305142732.GB8573@psychotron.redhat.com>

Le 05/03/2011 15:27, Jiri Pirko a écrit :
> Sat, Mar 05, 2011 at 03:06:58PM CET, nicolas.2p.debian@gmail.com wrote:
>> Le 05/03/2011 11:29, Jiri Pirko a écrit :
>>> Register slave pointer as rx_handler data. That would eventually prevent
>>> need to loop over slave devices to find the right slave.
>>>
>>> Use synchronize_net to ensure that bond_handle_frame does not get slave
>>> structure freed when working with that.
>>>
>>> Signed-off-by: Jiri Pirko<jpirko@redhat.com>
>>> ---
>>>   drivers/net/bonding/bond_main.c |   17 +++++++++++------
>>>   drivers/net/bonding/bonding.h   |    3 +++
>>>   2 files changed, 14 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
>>> index 0592e6d..1c19368 100644
>>> --- a/drivers/net/bonding/bond_main.c
>>> +++ b/drivers/net/bonding/bond_main.c
>>> @@ -1495,21 +1495,22 @@ static bool bond_should_deliver_exact_match(struct sk_buff *skb,
>>>
>>>   static struct sk_buff *bond_handle_frame(struct sk_buff *skb)
>>>   {
>>> -	struct net_device *slave_dev;
>>> +	struct slave *slave;
>>>   	struct net_device *bond_dev;
>>>
>>>   	skb = skb_share_check(skb, GFP_ATOMIC);
>>>   	if (unlikely(!skb))
>>>   		return NULL;
>>> -	slave_dev = skb->dev;
>>> -	bond_dev = ACCESS_ONCE(slave_dev->master);
>>> +
>>> +	slave = bond_slave_get_rcu(skb->dev);
>>> +	bond_dev = ACCESS_ONCE(slave->dev->master);
>>>   	if (unlikely(!bond_dev))
>>>   		return skb;
>>>
>>>   	if (bond_dev->priv_flags&   IFF_MASTER_ARPMON)
>>> -		slave_dev->last_rx = jiffies;
>>> +		slave->dev->last_rx = jiffies;
>>>
>>> -	if (bond_should_deliver_exact_match(skb, slave_dev, bond_dev)) {
>>> +	if (bond_should_deliver_exact_match(skb, slave->dev, bond_dev)) {
>>>   		skb->deliver_no_wcard = 1;
>>>   		return skb;
>>>   	}
>>
>> Up to this point, it looks like cleanup, and unrelated to the title and description of the patch.
>
> Nope - these are changes connected to the ability to get slave struct
> via bond_slave_get_rcu. Very related.

Agreed.

>>
>> Anyway, the cleanup looks good to me. Should just be in a separate patch.
>>
>>> @@ -1703,7 +1704,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
>>>   		pr_debug("Error %d calling netdev_set_bond_master\n", res);
>>>   		goto err_restore_mac;
>>>   	}
>>> -	res = netdev_rx_handler_register(slave_dev, bond_handle_frame, NULL);
>>> +	res = netdev_rx_handler_register(slave_dev, bond_handle_frame,
>>> +					 new_slave);
>>
>> And using rx_handler data for this purpose sounds good to me.
>>
>> Reviewed-by: Nicolas de Pesloüan<nicolas.2p.debian@free.fr>
>>
>>>   	if (res) {
>>>   		pr_debug("Error %d calling netdev_rx_handler_register\n", res);
>>>   		goto err_unset_master;
>>> @@ -1925,6 +1927,7 @@ err_close:
>>>
>>>   err_unreg_rxhandler:
>>>   	netdev_rx_handler_unregister(slave_dev);
>>> +	synchronize_net();
>>>
>>>   err_unset_master:
>>>   	netdev_set_bond_master(slave_dev, NULL);
>>> @@ -2108,6 +2111,7 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
>>>   	}
>>>
>>>   	netdev_rx_handler_unregister(slave_dev);
>>> +	synchronize_net();
>>>   	netdev_set_bond_master(slave_dev, NULL);
>>>
>>>   	slave_disable_netpoll(slave);
>>> @@ -2222,6 +2226,7 @@ static int bond_release_all(struct net_device *bond_dev)
>>>   		}
>>>
>>>   		netdev_rx_handler_unregister(slave_dev);
>>> +		synchronize_net();
>>>   		netdev_set_bond_master(slave_dev, NULL);
>>>
>>>   		slave_disable_netpoll(slave);
>>> diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h
>>> index ff4e269..1aac5cd 100644
>>> --- a/drivers/net/bonding/bonding.h
>>> +++ b/drivers/net/bonding/bonding.h
>>> @@ -264,6 +264,9 @@ struct bonding {
>>>   #endif /* CONFIG_DEBUG_FS */
>>>   };
>>>
>>> +#define bond_slave_get_rcu(dev) \
>>> +	((struct slave *) rcu_dereference(dev->rx_handler_data))
>>> +
>>>   /**
>>>    * Returns NULL if the net_device does not belong to any of the bond's slaves
>>>    *
>>
>


  reply	other threads:[~2011-03-05 14:38 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-05 10:29 [patch net-next-2.6 0/8] mostly bonding rx path changes Jiri Pirko
2011-03-05 10:29 ` [patch net-next-2.6 1/8] af_packet: use skb->skb_iif instead of orig_dev->ifindex Jiri Pirko
2011-03-05 14:03   ` Nicolas de Pesloüan
2011-03-05 10:29 ` [patch net-next-2.6 2/8] bonding: register slave pointer for rx_handler Jiri Pirko
2011-03-05 14:06   ` Nicolas de Pesloüan
2011-03-05 14:27     ` Jiri Pirko
2011-03-05 14:38       ` Nicolas de Pesloüan [this message]
2011-03-05 10:29 ` [patch net-next-2.6 3/8] net: get rid of multiple bond-related netdevice->priv_flags Jiri Pirko
2011-03-05 14:14   ` Nicolas de Pesloüan
2011-03-05 14:37     ` Ben Hutchings
2011-03-05 14:46       ` Nicolas de Pesloüan
2011-03-05 10:29 ` [patch net-next-2.6 4/8] bonding: wrap slave state work Jiri Pirko
2011-03-05 15:21   ` Nicolas de Pesloüan
2011-03-07  9:58     ` Jiri Pirko
2011-03-07 19:55       ` Nicolas de Pesloüan
2011-03-08  7:18         ` Jiri Pirko
2011-03-08 21:23           ` Nicolas de Pesloüan
2011-03-05 10:29 ` [patch net-next-2.6 5/8] bonding: get rid of IFF_SLAVE_INACTIVE netdev->priv_flag Jiri Pirko
2011-03-05 14:18   ` Nicolas de Pesloüan
2011-03-05 10:29 ` [patch net-next-2.6 6/8] bonding: move processing of recv handlers into handle_frame() Jiri Pirko
2011-03-05 14:33   ` Nicolas de Pesloüan
2011-03-05 14:43     ` Jiri Pirko
2011-03-05 14:50       ` Nicolas de Pesloüan
2011-03-06 12:24         ` Nicolas de Pesloüan
2011-03-06 13:34           ` Jiri Pirko
2011-03-06 14:25             ` Nicolas de Pesloüan
2011-03-06 16:32               ` Michał Mirosław
2011-03-06 17:37                 ` Nicolas de Pesloüan
2011-03-07 12:51             ` [patch net-next-2.6] net: reinject arps into bonding slave instead of master Jiri Pirko
2011-03-07 14:32               ` Andy Gospodarek
2011-03-07 20:12                 ` Nicolas de Pesloüan
2011-03-07 21:19                   ` Jiri Pirko
2011-03-07 21:30                     ` Nicolas de Pesloüan
2011-03-07 22:43               ` Andy Gospodarek
2011-03-07 23:09                 ` Nicolas de Pesloüan
2011-03-08  2:43                   ` Andy Gospodarek
2011-03-08 21:34                     ` Nicolas de Pesloüan
2011-03-08  7:13                 ` Jiri Pirko
2011-03-08 13:42                   ` Andy Gospodarek
2011-03-08 21:44                     ` Nicolas de Pesloüan
2011-03-09  7:45                       ` Jiri Pirko
2011-03-09 14:49                         ` Nicolas de Pesloüan
2011-03-09 15:09                           ` Jiri Pirko
2011-03-09 15:28                             ` Nicolas de Pesloüan
2011-03-09 17:11                               ` Jiri Pirko
2011-03-09 22:18                                 ` Nicolas de Pesloüan
2011-03-10  6:48                                   ` Jiri Pirko
2011-03-10 20:44                                     ` Nicolas de Pesloüan
2011-03-10 20:52                                       ` Jiri Pirko
2011-03-10 21:05                                       ` Jiri Pirko
2011-03-09 20:51                         ` Jiri Pirko
2011-03-09 13:33                       ` Neil Horman
2011-03-05 10:29 ` [patch net-next-2.6 7/8] net: introduce rx_handler results and logic around that Jiri Pirko
2011-03-05 12:48   ` Ben Hutchings
2011-03-05 14:52     ` Nicolas de Pesloüan
2011-03-05 14:54       ` Jiri Pirko
2011-03-05 15:06         ` Nicolas de Pesloüan
2011-03-05 15:13     ` [patch net-next-2.6] net: comment rx_handler results Jiri Pirko
2011-03-05 15:27       ` Nicolas de Pesloüan
2011-03-05 15:37         ` Jiri Pirko
2011-03-05 15:50           ` Nicolas de Pesloüan
2011-03-06 20:00             ` [PATCH net-next-2.6] net: enhance the documentation for rx_handler Nicolas de Pesloüan
2011-03-07  9:54               ` Jiri Pirko
2011-03-07 16:36               ` Stephen Hemminger
2011-03-07 20:01                 ` [PATCH net-next-2.6 V2] " Nicolas de Pesloüan
2011-03-05 15:31   ` [patch net-next-2.6 7/8 v2] net: introduce rx_handler results and logic around that Jiri Pirko
2011-03-05 10:29 ` [patch net-next-2.6 8/8] net: get rid of orig_dev parameter of packet handlers Jiri Pirko
2011-03-05 15:05   ` Nicolas de Pesloüan
2011-03-05 15:15     ` Jiri Pirko
2011-03-05 15:32   ` [patch net-next-2.6 8/8 v2] " Jiri Pirko
2011-03-05 16:56     ` Nicolas de Pesloüan
2011-03-05 22:07       ` Jiri Pirko
2011-03-05 22:18         ` Nicolas de Pesloüan
  -- strict thread matches above, loose matches on Subject: below --
2011-03-05  8:29 [patch net-next-2.6 0/8] mostly bonding rx path changes Jiri Pirko
2011-03-05  8:29 ` [patch net-next-2.6 2/8] bonding: register slave pointer for rx_handler Jiri Pirko

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=4D724AE8.6050107@gmail.com \
    --to=nicolas.2p.debian@gmail.com \
    --cc=andy@greyhouse.net \
    --cc=davem@davemloft.net \
    --cc=eric.dumazet@gmail.com \
    --cc=fubar@us.ibm.com \
    --cc=jpirko@redhat.com \
    --cc=kaber@trash.net \
    --cc=netdev@vger.kernel.org \
    --cc=shemminger@linux-foundation.org \
    /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.