From: Nikolay Aleksandrov <nikolay@redhat.com>
To: Veaceslav Falico <vfalico@redhat.com>
Cc: Ding Tianhong <dingtianhong@huawei.com>,
Jay Vosburgh <fubar@us.ibm.com>,
Andy Gospodarek <andy@greyhouse.net>,
"David S. Miller" <davem@davemloft.net>,
Netdev <netdev@vger.kernel.org>
Subject: Re: [PATCH net-next v4 1/6] bonding: simplify and use RCU protection for 3ad xmit path
Date: Sat, 07 Sep 2013 16:45:05 +0200 [thread overview]
Message-ID: <522B3BF1.2020208@redhat.com> (raw)
In-Reply-To: <20130907142041.GA20237@redhat.com>
On 09/07/2013 04:20 PM, Veaceslav Falico wrote:
> On Fri, Sep 06, 2013 at 03:28:07PM +0800, Ding Tianhong wrote:
<snip>
> (Also, mind the "likely(__ptr != __next)" - usually, and bonding is a very
> good example, we always have at least one element in the list.)
>
> This way, I'd recommend you to do bond_last_slave_rcu() the same way as
> here - you, though, might omit saving the slave_list pointer, it's not
> needed in case of bonding AFAIK. Something like that (I'm writing it in my
> mail editor - so it's only for the reference):
>
> #define bond_last_slave_rcu(bond) \
> ({struct list_head *__slave_ptr = list_next_rcu(&bond->slave_list); \
> likely(__slave_ptr != &bond->slave_list) ? \
> bond_to_slave_rcu(__slave_ptr) : NULL;})
>
>
> Or, even better (from my POV), add a generic macro to rculist.h (again,
> didn't even compile it) - it can be used later on:
>
> diff --git a/include/linux/rculist.h b/include/linux/rculist.h
> index f4b1001..37b49d1 100644
> --- a/include/linux/rculist.h
> +++ b/include/linux/rculist.h
> @@ -23,6 +23,7 @@
> * way, we must not access it directly
> */
> #define list_next_rcu(list) (*((struct list_head __rcu
> **)(&(list)->next)))
> +#define list_prev_rcu(list) (*((struct list_head __rcu
> **)(&(list)->prev)))
>
> /*
> * Insert a new entry between two known consecutive entries.
> @@ -271,6 +272,12 @@ static inline void list_splice_init_rcu(struct
> list_head *list,
> likely(__ptr != __next) ? container_of(__next, type, member) : NULL; \
> })
>
> +#define list_last_or_null_rcu(ptr, type, member) \
> + ({struct list_head *__ptr = (ptr); \
> + struct list_head __rcu *__last = list_prev_rcu(__ptr); \
> + likely(__ptr != __last) ? container_of(__prev, type, member) : NULL; \
> + })
> +
Hi,
Actually I don't think you can dereference ->prev and use the standard
list_del_rcu because it guarantees only the ->next ptr will be valid and
->prev is set to LIST_POISON2.
IMO, you'll need something like this: https://lkml.org/lkml/2012/7/25/193
with the bidir_del and all that.
But in any case I complete agree with Veaceslav here. Read all the
documentation carefully :-)
Cheers,
Nik
> /**
> * list_for_each_entry_rcu - iterate over rcu list of given type
> * @pos: the type * to use as a loop cursor.
> ------- END OF PATCH ------
>
> Anyway, it's up to you.
>
> Hope that helps.
next prev parent reply other threads:[~2013-09-07 14:45 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-06 7:28 [PATCH net-next v4 1/6] bonding: simplify and use RCU protection for 3ad xmit path Ding Tianhong
2013-09-06 11:59 ` Nikolay Aleksandrov
2013-09-07 14:20 ` Veaceslav Falico
2013-09-07 14:45 ` Nikolay Aleksandrov [this message]
2013-09-07 15:03 ` Veaceslav Falico
2013-09-08 6:05 ` Ding Tianhong
2013-09-09 8:58 ` Ding Tianhong
2013-09-09 9:57 ` Veaceslav Falico
2013-09-09 14:53 ` Ding Tianhong
2013-09-09 20:17 ` Veaceslav Falico
2013-09-12 16:17 ` Paul E. McKenney
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=522B3BF1.2020208@redhat.com \
--to=nikolay@redhat.com \
--cc=andy@greyhouse.net \
--cc=davem@davemloft.net \
--cc=dingtianhong@huawei.com \
--cc=fubar@us.ibm.com \
--cc=netdev@vger.kernel.org \
--cc=vfalico@redhat.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.