From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161401AbcAPAuM (ORCPT ); Fri, 15 Jan 2016 19:50:12 -0500 Received: from e35.co.us.ibm.com ([32.97.110.153]:45722 "EHLO e35.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161387AbcAPAuF (ORCPT ); Fri, 15 Jan 2016 19:50:05 -0500 X-IBM-Helo: d03dlp02.boulder.ibm.com X-IBM-MailFrom: paulmck@linux.vnet.ibm.com X-IBM-RcptTo: linux-kernel@vger.kernel.org Date: Fri, 15 Jan 2016 16:50:01 -0800 From: "Paul E. McKenney" To: Geliang Tang Cc: Josh Triplett , Steven Rostedt , Mathieu Desnoyers , Lai Jiangshan , linux-kernel@vger.kernel.org Subject: Re: [PATCH] rculist: move hlist_del_init_rcu to a proper place Message-ID: <20160116005001.GI3818@linux.vnet.ibm.com> Reply-To: paulmck@linux.vnet.ibm.com References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16011600-0013-0000-0000-00001BEF1DC2 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jan 12, 2016 at 11:08:30PM +0800, Geliang Tang wrote: > hlist_del_init_rcu() should not behind list_del_rcu(), should behind > hlist_del_rcu(). > > Signed-off-by: Geliang Tang Can't say I am all that excited by this one. Anyone on CC willing to speak up for it? Thanx, Paul > --- > include/linux/rculist.h | 56 ++++++++++++++++++++++++------------------------- > 1 file changed, 28 insertions(+), 28 deletions(-) > > diff --git a/include/linux/rculist.h b/include/linux/rculist.h > index 14ec165..99bed04 100644 > --- a/include/linux/rculist.h > +++ b/include/linux/rculist.h > @@ -133,34 +133,6 @@ static inline void list_del_rcu(struct list_head *entry) > } > > /** > - * hlist_del_init_rcu - deletes entry from hash list with re-initialization > - * @n: the element to delete from the hash list. > - * > - * Note: list_unhashed() on the node return true after this. It is > - * useful for RCU based read lockfree traversal if the writer side > - * must know if the list entry is still hashed or already unhashed. > - * > - * In particular, it means that we can not poison the forward pointers > - * that may still be used for walking the hash list and we can only > - * zero the pprev pointer so list_unhashed() will return true after > - * this. > - * > - * The caller must take whatever precautions are necessary (such as > - * holding appropriate locks) to avoid racing with another > - * list-mutation primitive, such as hlist_add_head_rcu() or > - * hlist_del_rcu(), running on this same list. However, it is > - * perfectly legal to run concurrently with the _rcu list-traversal > - * primitives, such as hlist_for_each_entry_rcu(). > - */ > -static inline void hlist_del_init_rcu(struct hlist_node *n) > -{ > - if (!hlist_unhashed(n)) { > - __hlist_del(n); > - n->pprev = NULL; > - } > -} > - > -/** > * list_replace_rcu - replace old entry by new one > * @old : the element to be replaced > * @new : the new element to insert > @@ -409,6 +381,34 @@ static inline void hlist_del_rcu(struct hlist_node *n) > } > > /** > + * hlist_del_init_rcu - deletes entry from hash list with re-initialization > + * @n: the element to delete from the hash list. > + * > + * Note: list_unhashed() on the node return true after this. It is > + * useful for RCU based read lockfree traversal if the writer side > + * must know if the list entry is still hashed or already unhashed. > + * > + * In particular, it means that we can not poison the forward pointers > + * that may still be used for walking the hash list and we can only > + * zero the pprev pointer so list_unhashed() will return true after > + * this. > + * > + * The caller must take whatever precautions are necessary (such as > + * holding appropriate locks) to avoid racing with another > + * list-mutation primitive, such as hlist_add_head_rcu() or > + * hlist_del_rcu(), running on this same list. However, it is > + * perfectly legal to run concurrently with the _rcu list-traversal > + * primitives, such as hlist_for_each_entry_rcu(). > + */ > +static inline void hlist_del_init_rcu(struct hlist_node *n) > +{ > + if (!hlist_unhashed(n)) { > + __hlist_del(n); > + n->pprev = NULL; > + } > +} > + > +/** > * hlist_replace_rcu - replace old entry by new one > * @old : the element to be replaced > * @new : the new element to insert > -- > 2.5.0 > >