All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: Oleg Nesterov <oleg@redhat.com>
Cc: torvalds@linux-foundation.org, jannh@google.com,
	paulmck@linux.vnet.ibm.com, bcrl@kvack.org,
	viro@zeniv.linux.org.uk, kent.overstreet@gmail.com,
	security@kernel.org, linux-kernel@vger.kernel.org,
	kernel-team@fb.com
Subject: Re: [PATCH 8/8] fs/aio: Use rcu_work instead of explicit rcu and work item
Date: Mon, 26 Mar 2018 08:04:59 -0700	[thread overview]
Message-ID: <20180326150459.GE1840639@devbig577.frc2.facebook.com> (raw)
In-Reply-To: <20180322112412.GA22183@redhat.com>

Hey, Oleg.

On Thu, Mar 22, 2018 at 12:24:12PM +0100, Oleg Nesterov wrote:
> OK. And I agree that the usage of WORK_STRUCT_PENDING_BIT in queue_rcu_work() is
> fine. If nothing else the kernel won't crash if you call queue_rcu_work() twice.
> 
> But why flush_rcu_work() can't simply do flush_work() ?
> 
> If WORK_STRUCT_PENDING_BIT was set by us (rcu_work_rcufn() succeeded) we do not
> need rcu_barrier(). Why should we care about other rcu callbacks?
>
> If rcu_work_rcufn() fails and someone else sets PENDING, how this rcu_barrier()
> can help? We didn't even do call_rcu() in this case.
> 
> In short. Once flush_work() returns we know that rcu callback which queued this
> work is finished. It doesn't matter if it was fired by us or not. And if it was
> not fired by us, then rcu_barrier() doesn't imply a grace period anyway.

flush_*work() guarantees to wait for the completion of the latest
instance of the work item which was visible to the caller.  We can't
guarantee that w/o rcu_barrier().

> > We can try to
> > make it more specialized but then flush_rcu_work()'s behavior would
> > have to different too and it gets confusing quickly.  Unless there are
> > overriding reasons to deviate, I'd like to keep it consistent.
> 
> Perhaps this all is consistent, but I fail to understand this API :/
> 
> And again, at least for fs/aio.c it doesn't offer too much but sub-optimal
> compared to call_rcu() + schedule_work() by hand.

Sure, this isn't about performance.  It's about making code less
painful on the eyes.  If performance matters, we sure can hand-craft
things, which doesn't seem to be the case, right?

Thanks.

-- 
tejun

  reply	other threads:[~2018-03-26 15:04 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-14 19:41 [PATCHSET v2] percpu_ref, RCU: Audit RCU usages in percpu_ref users Tejun Heo
2018-03-14 19:45 ` [PATCH 1/8] fs/aio: Add explicit RCU grace period when freeing kioctx Tejun Heo
2018-03-14 19:45   ` [PATCH 2/8] fs/aio: Use RCU accessors for kioctx_table->table[] Tejun Heo
2018-03-14 19:45   ` [PATCH 3/8] RDMAVT: Fix synchronization around percpu_ref Tejun Heo
2018-03-15 22:24     ` Jason Gunthorpe
2018-03-14 19:45   ` [PATCH 4/8] HMM: Remove superflous RCU protection around radix tree lookup Tejun Heo
2018-03-14 19:45     ` Tejun Heo
2018-03-26 14:54     ` Tejun Heo
2018-03-26 14:54       ` Tejun Heo
2018-03-27 16:12       ` Jerome Glisse
2018-03-27 16:12         ` Jerome Glisse
2018-03-14 19:45   ` [PATCH 5/8] percpu_ref: Update doc to dissuade users from depending on internal RCU grace periods Tejun Heo
2018-03-19 17:10     ` Tejun Heo
2018-03-14 19:45   ` [PATCH 6/8] RCU, workqueue: Implement rcu_work Tejun Heo
2018-03-14 20:13     ` Paul E. McKenney
2018-03-16  6:01     ` Lai Jiangshan
2018-03-19 16:45       ` Tejun Heo
2018-03-20 10:04         ` Lai Jiangshan
2018-03-14 19:45   ` [PATCH 7/8] cgroup: Use rcu_work instead of explicit rcu and work item Tejun Heo
2018-03-14 19:45   ` [PATCH 8/8] fs/aio: " Tejun Heo
2018-03-19 17:12     ` Tejun Heo
2018-03-21 15:58     ` Oleg Nesterov
2018-03-21 16:40       ` Tejun Heo
2018-03-21 17:17         ` Oleg Nesterov
2018-03-21 17:53           ` Tejun Heo
2018-03-22 11:24             ` Oleg Nesterov
2018-03-26 15:04               ` Tejun Heo [this message]
2018-03-27 14:28                 ` Oleg Nesterov
2018-03-27 15:55                   ` Tejun Heo
2018-03-29 16:49                     ` Oleg Nesterov
2018-03-29 17:41                       ` Tejun Heo

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=20180326150459.GE1840639@devbig577.frc2.facebook.com \
    --to=tj@kernel.org \
    --cc=bcrl@kvack.org \
    --cc=jannh@google.com \
    --cc=kent.overstreet@gmail.com \
    --cc=kernel-team@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oleg@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=security@kernel.org \
    --cc=torvalds@linux-foundation.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.