linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: NeilBrown <neilb@suse.de>
Cc: Christian Brauner <brauner@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	 Ingo Molnar <mingo@redhat.com>, Jeff Layton <jlayton@kernel.org>,
	Jan Kara <jack@suse.cz>,
	 linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH RFC v2 1/6] fs: add i_state helpers
Date: Fri, 23 Aug 2024 11:05:38 +0800	[thread overview]
Message-ID: <CAHk-=wjwOFTLviM2zB9M-BtsK7spLP9XYZ=bAL_Pospi--QyPg@mail.gmail.com> (raw)
In-Reply-To: <CAHk-=wjTYN4tr9cjc2ROA1AJP5LzMh6OoNAz8pVSUMP0Kd7AFA@mail.gmail.com>

On Fri, 23 Aug 2024 at 10:52, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> The wake_up_var() infrastructure that the inode code uses is a bit
> more involved. Not only can the variable be anything at all (so the
> operations you can do on it are obviously largely unbounded), but the
> inode hack in particular then uses one thing for the actual variable,
> and another thing for the address that is used to match up waits and
> wakeups.

.. btw, that doesn't mean we can't have helpers for the common cases.
They might have to be macros (so that they just work regardless of the
type), but having a

    set_var_and_wake(var, value);

macro that just expands to something like (completely untested "maybe
this works" macro):

  #define set_var_and_wake(var,value) do {        \
        __auto_type __set_ptr = &(var);          \
        *(__set_ptr) = (value);                 \
        smp_mb();                               \
        wake_up_var(__set_ptr);                 \
  } while (0)

doesn't sound too bad for at least some common patterns.

Looking around, we do seem to have a pattern of

   smp_store_release() -> wake_up_var()

instead of a memory barrier. I don't think that actually works. The
smp_store_release() means that *earlier* accesses will be bounded by
the store operation, but *later* accesses - including very much the
"look if the wait queue is empty" check - are totally unordered by it,
and can be done before the store by the CPU.

But I haven't thought deeply about it, that was just my gut reaction
when seeing the pattern. It superficially makes sense, but I think
it's entirely wrong (it's a "smp_load_acquire()" that would order with
later accesses, but there is no "store with acquire semantics"
operation).

              Linus

  reply	other threads:[~2024-08-23  3:05 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-21 15:47 [PATCH RFC v2 0/6] inode: turn i_state into u32 Christian Brauner
2024-08-21 15:47 ` [PATCH RFC v2 1/6] fs: add i_state helpers Christian Brauner
2024-08-21 22:12   ` NeilBrown
2024-08-21 22:47     ` Linus Torvalds
2024-08-21 23:34     ` Dave Chinner
2024-08-23  0:08       ` NeilBrown
2024-08-22  8:27     ` Christian Brauner
2024-08-22  8:37       ` Linus Torvalds
2024-08-23  0:14       ` NeilBrown
2024-08-23  2:52         ` Linus Torvalds
2024-08-23  3:05           ` Linus Torvalds [this message]
2024-08-23  3:44             ` Linus Torvalds
2024-08-23  5:01           ` NeilBrown
2024-08-23 12:47           ` [PATCH v3 0/6] inode: turn i_state into u32 Christian Brauner
2024-08-23 12:47             ` [PATCH v3 1/6] fs: add i_state helpers Christian Brauner
2024-09-05 16:01               ` Jan Kara
2024-08-23 12:47             ` [PATCH v3 2/6] fs: reorder i_state bits Christian Brauner
2024-09-05 16:02               ` Jan Kara
2024-08-23 12:47             ` [PATCH v3 3/6] inode: port __I_SYNC to var event Christian Brauner
2024-09-05 16:02               ` Jan Kara
2024-08-23 12:47             ` [PATCH v3 4/6] inode: port __I_NEW " Christian Brauner
2024-09-06 13:30               ` Jan Kara
2024-08-23 12:47             ` [PATCH v3 5/6] inode: port __I_LRU_ISOLATING " Christian Brauner
2024-09-09  7:35               ` Jan Kara
2024-08-23 12:47             ` [PATCH v3 6/6] inode: make i_state a u32 Christian Brauner
2024-09-09  7:35               ` Jan Kara
2024-08-23 15:06             ` [PATCH v3 0/6] inode: turn i_state into u32 Josef Bacik
2024-08-21 22:28   ` [PATCH RFC v2 1/6] fs: add i_state helpers Dave Chinner
2024-08-21 22:53     ` Linus Torvalds
2024-08-21 15:47 ` [PATCH RFC v2 2/6] fs: reorder i_state bits Christian Brauner
2024-08-21 15:47 ` [PATCH RFC v2 3/6] writeback: port __I_SYNC to var event Christian Brauner
2024-08-21 15:47 ` [PATCH RFC v2 4/6] inode: port __I_NEW " Christian Brauner
2024-08-23  0:31   ` NeilBrown
2024-08-23  8:20     ` Christian Brauner
2024-08-23 11:07       ` Christian Brauner
2024-08-21 15:47 ` [PATCH RFC v2 5/6] inode: port __I_LRU_ISOLATING " Christian Brauner
2024-08-21 19:41   ` Jeff Layton
2024-08-22  8:53     ` Christian Brauner
2024-08-22  9:48       ` Mateusz Guzik
2024-08-22 11:10         ` Christian Brauner
2024-08-22 12:46           ` Mateusz Guzik
2024-08-23  0:36   ` NeilBrown
2024-08-23  2:24     ` Linus Torvalds
2024-08-23  8:29       ` Christian Brauner
2024-08-21 15:47 ` [PATCH RFC v2 6/6] inode: make i_state a u32 Christian Brauner
2024-08-21 21:03   ` Andreas Dilger
2024-08-22  8:31     ` Christian Brauner
2024-08-21 19:15 ` [PATCH RFC v2 0/6] inode: turn i_state into u32 Josef Bacik
2024-08-21 19:42 ` Jeff Layton

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='CAHk-=wjwOFTLviM2zB9M-BtsK7spLP9XYZ=bAL_Pospi--QyPg@mail.gmail.com' \
    --to=torvalds@linux-foundation.org \
    --cc=brauner@kernel.org \
    --cc=jack@suse.cz \
    --cc=jlayton@kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=neilb@suse.de \
    --cc=peterz@infradead.org \
    /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 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).