All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: Imran Khan <imran.f.khan@oracle.com>
Cc: viro@zeniv.linux.org.uk, gregkh@linuxfoundation.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/5] kernfs: make ->attr.open RCU protected.
Date: Thu, 12 May 2022 07:09:26 -1000	[thread overview]
Message-ID: <Yn0/RrgMRie2YPEb@slm.duckdns.org> (raw)
In-Reply-To: <f5ff2554-580c-c817-b77f-25e2ef46411f@oracle.com>

Hello,

On Fri, May 06, 2022 at 09:12:23AM +1000, Imran Khan wrote:
> On 6/5/22 6:01 am, Tejun Heo wrote:
> > On Thu, Apr 28, 2022 at 03:54:28PM +1000, Imran Khan wrote:
> >> +static struct kernfs_open_node *kernfs_deref_on_raw(struct kernfs_node *kn)
> >> +{
> >> +	return rcu_dereference_raw(kn->attr.open);
> >> +}
> > 
> > Wrapping the above probably isn't helping anything.
> > 
> 
> This change is using raw deref at a few places, so I thought of putting
> raw deref under a wrapper and explain in the wrapper function comment
> under what conditions raw dereferencing was safe.

I don't think they need raw deref in the first place and if you *really*
need raw deref, the wrapper explaining why they're needed and how they're
safe is the whole point of it and I don't think the wrapper achieves that.

> >> +/*
> >> + * Check ->attr.open corresponding to @kn while holding kernfs_open_file_mutex.
> >> + * ->attr.open is modified under kernfs_open_file_mutex. So it can be safely
> >> + * accessed outside RCU read-side critical section, while holding the mutex.
> >> + */
> >> +static struct kernfs_open_node *kernfs_check_on_protected(struct kernfs_node *kn)
> >> +{
> >> +	return rcu_dereference_check(kn->attr.open,
> >> +				      lockdep_is_held(&kernfs_open_file_mutex));
> >> +}
> > 
> > Maybe name this just kernfs_deref_on()?
> > 
> 
> Sure. I can mention in the function comment that this should be used
> only under kernfs_open_file_mutex.

and in the check condition, add the conditions that you need to make this
not trigger warning when used in all the places that you wanna use it.

> +static struct kernfs_open_node *kernfs_deref_on_raw(struct
> kernfs_open_file *of, struct kernfs_node *kn)
>  {
> -       return rcu_dereference_raw(kn->attr.open);
> +       struct kernfs_open_node *on;
> +
> +       if (list_empty(&of->list))
> +               return NULL;
> +
> +       on = rcu_dereference_raw(kn->attr.open);
> +
> +       if (list_empty(&on->files))
> +               return NULL;
> +       else
> +               return on;

Put the above conditions in the rcu_dereference_check(). That's what it is
for - describing the additional conditions that make the dereference safe.

Thanks.

-- 
tejun

  reply	other threads:[~2022-05-12 17:09 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-28  5:54 [PATCH 0/5] kernfs: Remove reference counting for kernfs_open_node Imran Khan
2022-04-28  5:54 ` [PATCH 1/5] " Imran Khan
2022-05-05 19:46   ` Tejun Heo
2022-04-28  5:54 ` [PATCH 2/5] kernfs: make ->attr.open RCU protected Imran Khan
2022-05-05 20:01   ` Tejun Heo
2022-05-05 23:12     ` Imran Khan
2022-05-12 17:09       ` Tejun Heo [this message]
2022-05-15 16:00         ` Imran Khan
2022-05-16 19:35           ` Tejun Heo
2022-05-17  2:30             ` Imran Khan
2022-05-17  4:21               ` Tejun Heo
2022-04-28  5:54 ` [PATCH 3/5] kernfs: Change kernfs_notify_list to llist Imran Khan
2022-05-05 20:03   ` Tejun Heo
2022-04-28  5:54 ` [PATCH 4/5] kernfs: Introduce interface to access global kernfs_open_file_mutex Imran Khan
2022-05-05 20:04   ` Tejun Heo
2022-04-28  5:54 ` [PATCH 5/5] kernfs: Replace global kernfs_open_file_mutex with hashed mutexes Imran Khan
2022-05-05 20:05   ` Tejun Heo
2022-05-11  9:58     ` Imran Khan

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=Yn0/RrgMRie2YPEb@slm.duckdns.org \
    --to=tj@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=imran.f.khan@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /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.