* [PATCH tip/core/rcu 09/12] fs: Substitute rcu_access_pointer() for rcu_dereference_raw() [not found] ` <1392672959-6386-1-git-send-email-paulmck@linux.vnet.ibm.com> @ 2014-02-17 21:35 ` Paul E. McKenney 2014-02-17 22:00 ` Josh Triplett 0 siblings, 1 reply; 5+ messages in thread From: Paul E. McKenney @ 2014-02-17 21:35 UTC (permalink / raw) To: linux-kernel Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, niv, tglx, peterz, rostedt, dhowells, edumazet, darren, fweisbec, oleg, sbw, Paul E. McKenney, Alexander Viro, linux-fsdevel From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> (Trivial patch.) If the code is looking at the RCU-protected pointer itself, but not dereferencing it, the rcu_dereference() functions can be downgraded to rcu_access_pointer(). This commit makes this downgrade in __alloc_fd(), which simply compares the RCU-protected pointer against NULL with no dereferencing. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: linux-fsdevel@vger.kernel.org --- fs/file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/file.c b/fs/file.c index db25c2bdfe46..18f7d27855c4 100644 --- a/fs/file.c +++ b/fs/file.c @@ -497,7 +497,7 @@ repeat: error = fd; #if 1 /* Sanity check */ - if (rcu_dereference_raw(fdt->fd[fd]) != NULL) { + if (rcu_access_pointer(fdt->fd[fd]) != NULL) { printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); rcu_assign_pointer(fdt->fd[fd], NULL); } -- 1.8.1.5 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH tip/core/rcu 09/12] fs: Substitute rcu_access_pointer() for rcu_dereference_raw() 2014-02-17 21:35 ` [PATCH tip/core/rcu 09/12] fs: Substitute rcu_access_pointer() for rcu_dereference_raw() Paul E. McKenney @ 2014-02-17 22:00 ` Josh Triplett 2014-02-17 23:05 ` Paul E. McKenney 0 siblings, 1 reply; 5+ messages in thread From: Josh Triplett @ 2014-02-17 22:00 UTC (permalink / raw) To: Paul E. McKenney Cc: linux-kernel, mingo, laijs, dipankar, akpm, mathieu.desnoyers, niv, tglx, peterz, rostedt, dhowells, edumazet, darren, fweisbec, oleg, sbw, Alexander Viro, linux-fsdevel On Mon, Feb 17, 2014 at 01:35:56PM -0800, Paul E. McKenney wrote: > From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> > > (Trivial patch.) > > If the code is looking at the RCU-protected pointer itself, but not > dereferencing it, the rcu_dereference() functions can be downgraded to > rcu_access_pointer(). This commit makes this downgrade in __alloc_fd(), > which simply compares the RCU-protected pointer against NULL with no > dereferencing. > > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> > Cc: Alexander Viro <viro@zeniv.linux.org.uk> > Cc: linux-fsdevel@vger.kernel.org I'm beginning to wonder if this common pattern ought to have an rcu_pointer_is_null(), which would not return the pointer, only the boolean. Regardless, for this patch: Reviewed-by: Josh Triplett <josh@joshtriplett.org> > fs/file.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/file.c b/fs/file.c > index db25c2bdfe46..18f7d27855c4 100644 > --- a/fs/file.c > +++ b/fs/file.c > @@ -497,7 +497,7 @@ repeat: > error = fd; > #if 1 > /* Sanity check */ > - if (rcu_dereference_raw(fdt->fd[fd]) != NULL) { > + if (rcu_access_pointer(fdt->fd[fd]) != NULL) { > printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); > rcu_assign_pointer(fdt->fd[fd], NULL); > } > -- > 1.8.1.5 > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH tip/core/rcu 09/12] fs: Substitute rcu_access_pointer() for rcu_dereference_raw() 2014-02-17 22:00 ` Josh Triplett @ 2014-02-17 23:05 ` Paul E. McKenney 2014-02-18 0:04 ` Josh Triplett 0 siblings, 1 reply; 5+ messages in thread From: Paul E. McKenney @ 2014-02-17 23:05 UTC (permalink / raw) To: Josh Triplett Cc: linux-kernel, mingo, laijs, dipankar, akpm, mathieu.desnoyers, niv, tglx, peterz, rostedt, dhowells, edumazet, darren, fweisbec, oleg, sbw, Alexander Viro, linux-fsdevel On Mon, Feb 17, 2014 at 02:00:15PM -0800, Josh Triplett wrote: > On Mon, Feb 17, 2014 at 01:35:56PM -0800, Paul E. McKenney wrote: > > From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> > > > > (Trivial patch.) > > > > If the code is looking at the RCU-protected pointer itself, but not > > dereferencing it, the rcu_dereference() functions can be downgraded to > > rcu_access_pointer(). This commit makes this downgrade in __alloc_fd(), > > which simply compares the RCU-protected pointer against NULL with no > > dereferencing. > > > > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> > > Cc: Alexander Viro <viro@zeniv.linux.org.uk> > > Cc: linux-fsdevel@vger.kernel.org > > I'm beginning to wonder if this common pattern ought to have an > rcu_pointer_is_null(), which would not return the pointer, only the > boolean. Or perhaps an rcu_compare_pointer() to also handle the various cases like: if (rcu_dereference_raw(foop) == barp) ... I added the problem to the RCU cleanup list on the OPW site, and your solution or my elaboration of it might be the right thing to do. (Inspected all 1300 uses of members of the rcu_dereference() family of functions last week, and was feeling a bit buggy-eyed at the end...) Thanx, Paul > Regardless, for this patch: > Reviewed-by: Josh Triplett <josh@joshtriplett.org> > > > fs/file.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/fs/file.c b/fs/file.c > > index db25c2bdfe46..18f7d27855c4 100644 > > --- a/fs/file.c > > +++ b/fs/file.c > > @@ -497,7 +497,7 @@ repeat: > > error = fd; > > #if 1 > > /* Sanity check */ > > - if (rcu_dereference_raw(fdt->fd[fd]) != NULL) { > > + if (rcu_access_pointer(fdt->fd[fd]) != NULL) { > > printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); > > rcu_assign_pointer(fdt->fd[fd], NULL); > > } > > -- > > 1.8.1.5 > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH tip/core/rcu 09/12] fs: Substitute rcu_access_pointer() for rcu_dereference_raw() 2014-02-17 23:05 ` Paul E. McKenney @ 2014-02-18 0:04 ` Josh Triplett 2014-02-18 0:27 ` Paul E. McKenney 0 siblings, 1 reply; 5+ messages in thread From: Josh Triplett @ 2014-02-18 0:04 UTC (permalink / raw) To: Paul E. McKenney Cc: linux-kernel, mingo, laijs, dipankar, akpm, mathieu.desnoyers, niv, tglx, peterz, rostedt, dhowells, edumazet, darren, fweisbec, oleg, sbw, Alexander Viro, linux-fsdevel On Mon, Feb 17, 2014 at 03:05:11PM -0800, Paul E. McKenney wrote: > On Mon, Feb 17, 2014 at 02:00:15PM -0800, Josh Triplett wrote: > > On Mon, Feb 17, 2014 at 01:35:56PM -0800, Paul E. McKenney wrote: > > > From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> > > > > > > (Trivial patch.) > > > > > > If the code is looking at the RCU-protected pointer itself, but not > > > dereferencing it, the rcu_dereference() functions can be downgraded to > > > rcu_access_pointer(). This commit makes this downgrade in __alloc_fd(), > > > which simply compares the RCU-protected pointer against NULL with no > > > dereferencing. > > > > > > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> > > > Cc: Alexander Viro <viro@zeniv.linux.org.uk> > > > Cc: linux-fsdevel@vger.kernel.org > > > > I'm beginning to wonder if this common pattern ought to have an > > rcu_pointer_is_null(), which would not return the pointer, only the > > boolean. > > Or perhaps an rcu_compare_pointer() to also handle the various cases like: > > if (rcu_dereference_raw(foop) == barp) ... > > I added the problem to the RCU cleanup list on the OPW site, and > your solution or my elaboration of it might be the right thing to do. > (Inspected all 1300 uses of members of the rcu_dereference() family of > functions last week, and was feeling a bit buggy-eyed at the end...) rcu_pointer_eq and/or rcu_pointer_neq might make sense, yeah, as self-documenting versions of the most sensible way to do the operation, to steer people away from rcu_dereference or rcu_dereference_raw. - Jsoh Triplett > Thanx, Paul > > > Regardless, for this patch: > > Reviewed-by: Josh Triplett <josh@joshtriplett.org> > > > > > fs/file.c | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/fs/file.c b/fs/file.c > > > index db25c2bdfe46..18f7d27855c4 100644 > > > --- a/fs/file.c > > > +++ b/fs/file.c > > > @@ -497,7 +497,7 @@ repeat: > > > error = fd; > > > #if 1 > > > /* Sanity check */ > > > - if (rcu_dereference_raw(fdt->fd[fd]) != NULL) { > > > + if (rcu_access_pointer(fdt->fd[fd]) != NULL) { > > > printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); > > > rcu_assign_pointer(fdt->fd[fd], NULL); > > > } > > > -- > > > 1.8.1.5 > > > > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH tip/core/rcu 09/12] fs: Substitute rcu_access_pointer() for rcu_dereference_raw() 2014-02-18 0:04 ` Josh Triplett @ 2014-02-18 0:27 ` Paul E. McKenney 0 siblings, 0 replies; 5+ messages in thread From: Paul E. McKenney @ 2014-02-18 0:27 UTC (permalink / raw) To: Josh Triplett Cc: linux-kernel, mingo, laijs, dipankar, akpm, mathieu.desnoyers, niv, tglx, peterz, rostedt, dhowells, edumazet, darren, fweisbec, oleg, sbw, Alexander Viro, linux-fsdevel On Mon, Feb 17, 2014 at 04:04:31PM -0800, Josh Triplett wrote: > On Mon, Feb 17, 2014 at 03:05:11PM -0800, Paul E. McKenney wrote: > > On Mon, Feb 17, 2014 at 02:00:15PM -0800, Josh Triplett wrote: > > > On Mon, Feb 17, 2014 at 01:35:56PM -0800, Paul E. McKenney wrote: > > > > From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> > > > > > > > > (Trivial patch.) > > > > > > > > If the code is looking at the RCU-protected pointer itself, but not > > > > dereferencing it, the rcu_dereference() functions can be downgraded to > > > > rcu_access_pointer(). This commit makes this downgrade in __alloc_fd(), > > > > which simply compares the RCU-protected pointer against NULL with no > > > > dereferencing. > > > > > > > > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> > > > > Cc: Alexander Viro <viro@zeniv.linux.org.uk> > > > > Cc: linux-fsdevel@vger.kernel.org > > > > > > I'm beginning to wonder if this common pattern ought to have an > > > rcu_pointer_is_null(), which would not return the pointer, only the > > > boolean. > > > > Or perhaps an rcu_compare_pointer() to also handle the various cases like: > > > > if (rcu_dereference_raw(foop) == barp) ... > > > > I added the problem to the RCU cleanup list on the OPW site, and > > your solution or my elaboration of it might be the right thing to do. > > (Inspected all 1300 uses of members of the rcu_dereference() family of > > functions last week, and was feeling a bit buggy-eyed at the end...) > > rcu_pointer_eq and/or rcu_pointer_neq might make sense, yeah, as > self-documenting versions of the most sensible way to do the operation, > to steer people away from rcu_dereference or rcu_dereference_raw. Good point! I added this to http://kernelnewbies.org/OPWIntro-RCU?action=show, crediting you for the idea. Thanx, Paul > - Jsoh Triplett > > > Thanx, Paul > > > > > Regardless, for this patch: > > > Reviewed-by: Josh Triplett <josh@joshtriplett.org> > > > > > > > fs/file.c | 2 +- > > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > > > diff --git a/fs/file.c b/fs/file.c > > > > index db25c2bdfe46..18f7d27855c4 100644 > > > > --- a/fs/file.c > > > > +++ b/fs/file.c > > > > @@ -497,7 +497,7 @@ repeat: > > > > error = fd; > > > > #if 1 > > > > /* Sanity check */ > > > > - if (rcu_dereference_raw(fdt->fd[fd]) != NULL) { > > > > + if (rcu_access_pointer(fdt->fd[fd]) != NULL) { > > > > printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd); > > > > rcu_assign_pointer(fdt->fd[fd], NULL); > > > > } > > > > -- > > > > 1.8.1.5 > > > > > > > > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-02-18 0:27 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20140217213533.GA5387@linux.vnet.ibm.com>
[not found] ` <1392672959-6386-1-git-send-email-paulmck@linux.vnet.ibm.com>
2014-02-17 21:35 ` [PATCH tip/core/rcu 09/12] fs: Substitute rcu_access_pointer() for rcu_dereference_raw() Paul E. McKenney
2014-02-17 22:00 ` Josh Triplett
2014-02-17 23:05 ` Paul E. McKenney
2014-02-18 0:04 ` Josh Triplett
2014-02-18 0:27 ` Paul E. McKenney
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).