From: Shakeel Butt <shakeel.butt@linux.dev>
To: Joanne Koong <joannelkoong@gmail.com>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
linux-fsdevel@vger.kernel.org, josef@toxicpanda.com,
bernd.schubert@fastmail.fm, jefflexu@linux.alibaba.com,
hannes@cmpxchg.org, linux-mm@kvack.org, kernel-team@meta.com
Subject: Re: [PATCH v2 2/2] fuse: remove tmp folio for writebacks and internal rb tree
Date: Thu, 17 Oct 2024 22:57:51 -0700 [thread overview]
Message-ID: <tbkfwtebn4l46cnwoqrf2cm7e5r5ndy7zj2bvdnk4n2q7yk5xh@gmno3qfufaur> (raw)
In-Reply-To: <CAJnrk1bByc+qJTAvfJZxp5=o=N8EdgKWxQN-jWOW8Rv-PZMZRA@mail.gmail.com>
On Thu, Oct 17, 2024 at 06:30:08PM GMT, Joanne Koong wrote:
> On Tue, Oct 15, 2024 at 3:01 AM Miklos Szeredi <miklos@szeredi.hu> wrote:
> >
> > On Mon, 14 Oct 2024 at 20:23, Joanne Koong <joannelkoong@gmail.com> wrote:
> >
> > > This change sets AS_NO_WRITEBACK_RECLAIM on the inode mapping so that
> > > FUSE folios are not reclaimed and waited on while in writeback, and
> > > removes the temporary folio + extra copying and the internal rb tree.
> >
> > What about sync(2)? And page migration?
> >
> > Hopefully there are no other cases, but I think a careful review of
> > places where generic code waits for writeback is needed before we can
> > say for sure.
>
> The places where I see this potential deadlock still being possible are:
> * page migration when handling a page fault:
> In particular, this path: handle_mm_fault() ->
> __handle_mm_fault() -> handle_pte_fault() -> do_numa_page() ->
> migrate_misplaced_folio() -> migrate_pages() -> migrate_pages_sync()
> -> migrate_pages_batch() -> migrate_folio_unmap() ->
> folio_wait_writeback()
So, this is numa fault and if fuse server is not mapping the fuse folios
which it is serving, in its address space then this is not an issue.
However hugepage allocation on page fault can cause compaction which
might migrate unrelated fuse folios. So, fuse server doing compaction
is an issue and we need to resolve similar to reclaim codepath. (Though
I think for THP it is not doing MIGRATE_SYNC but doing for gigantic
hugetlb pages).
> * syscalls that trigger waits on writeback, which will lead to
> deadlock if a single-threaded fuse server calls this when servicing
> requests:
> - sync(), sync_file_range(), fsync(), fdatasync()
> - swapoff()
> - move_pages()
>
> I need to analyze the page fault path more to get a clearer picture of
> what is happening, but so far this looks like a valid case for a
> correctly written fuse server to run into.
> For the syscalls however, is it valid/safe in general (disregarding
> the writeback deadlock scenario for a minute) for fuse servers to be
> invoking these syscalls in their handlers anyways?
>
> The other places where I see a generic wait on writeback seem safe:
> * splice, page_cache_pipe_buf_try_steal() (fs/splice.c):
> We hit this in fuse when we try to move a page from the pipe buffer
> into the page cache (fuse_try_move_page()) for the SPLICE_F_MOVE case.
> This wait seems fine, since the folio that's being waited on is the
> folio in the pipe buffer which is not a fuse folio.
> * memory failure (mm/memory_failure.c):
> Soft offlining a page and handling page memory failure - these can
> be triggered asynchronously (memory_failure_work_func()), but this
> should be fine for the fuse use case since the server isn't blocked on
> servicing any writeback requests while memory failure handling is
> waiting on writeback
> * page truncation (mm/truncate.c):
> Same here. These cases seem fine since the server isn't blocked on
> servicing writeback requests while truncation waits on writeback
>
>
> Thanks,
> Joanne
>
> >
> > Thanks,
> > Miklos
next prev parent reply other threads:[~2024-10-18 5:58 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-14 18:22 [PATCH v2 0/2] fuse: remove extra page copies in writeback Joanne Koong
2024-10-14 18:22 ` [PATCH v2 1/2] mm: skip reclaiming folios in writeback contexts that may trigger deadlock Joanne Koong
2024-10-14 18:38 ` Shakeel Butt
2024-10-14 21:04 ` Joanne Koong
2024-10-14 23:57 ` Shakeel Butt
2024-10-15 16:59 ` Joanne Koong
2024-10-14 18:22 ` [PATCH v2 2/2] fuse: remove tmp folio for writebacks and internal rb tree Joanne Koong
2024-10-15 10:01 ` Miklos Szeredi
2024-10-15 17:06 ` Joanne Koong
2024-10-15 19:17 ` Shakeel Butt
2024-10-16 9:44 ` Jingbo Xu
2024-10-16 9:57 ` Miklos Szeredi
2024-10-16 9:51 ` Miklos Szeredi
2024-10-16 17:52 ` Shakeel Butt
2024-10-16 18:37 ` Miklos Szeredi
2024-10-16 21:27 ` Shakeel Butt
2024-10-17 13:31 ` Miklos Szeredi
2024-10-18 5:31 ` Shakeel Butt
2024-10-21 10:15 ` Miklos Szeredi
2024-10-21 17:01 ` Shakeel Butt
2024-10-22 15:03 ` Miklos Szeredi
2024-10-21 21:05 ` Joanne Koong
2024-10-24 16:54 ` Joanne Koong
2024-10-25 1:38 ` Jingbo Xu
2024-10-25 15:32 ` Miklos Szeredi
2024-10-25 17:36 ` Joanne Koong
2024-10-25 18:02 ` Miklos Szeredi
2024-10-25 18:19 ` Joanne Koong
2024-10-28 2:02 ` Jingbo Xu
2024-10-25 18:47 ` Joanne Koong
2024-10-28 2:28 ` Jingbo Xu
2024-10-28 21:57 ` Joanne Koong
2024-10-25 22:40 ` Joanne Koong
2024-10-28 21:58 ` Joanne Koong
2024-10-30 9:32 ` Bernd Schubert
2024-10-30 16:04 ` Joanne Koong
2024-10-30 16:21 ` Bernd Schubert
2024-10-30 17:02 ` Joanne Koong
2024-10-30 17:27 ` Bernd Schubert
2024-10-30 17:35 ` Joanne Koong
2024-10-30 21:56 ` Shakeel Butt
2024-10-30 22:17 ` Bernd Schubert
2024-10-30 22:51 ` Joanne Koong
2024-10-31 0:30 ` Shakeel Butt
2024-10-31 19:06 ` Joanne Koong
2024-10-31 20:06 ` Shakeel Butt
2024-10-31 21:52 ` Joanne Koong
2024-10-31 22:38 ` Shakeel Butt
2024-11-06 23:37 ` Joanne Koong
2024-11-06 23:56 ` Shakeel Butt
2024-11-01 11:44 ` Jingbo Xu
2024-11-01 20:54 ` Joanne Koong
2024-11-04 8:09 ` Jingbo Xu
2024-10-29 22:04 ` Bernd Schubert
2024-10-16 9:56 ` Jingbo Xu
2024-10-16 10:00 ` Miklos Szeredi
2024-10-18 1:30 ` Joanne Koong
2024-10-18 5:57 ` Shakeel Butt [this message]
2024-10-18 19:57 ` Joanne Koong
2024-10-18 20:46 ` Shakeel Butt
2024-10-21 9:32 ` Miklos Szeredi
2024-10-18 9:24 ` Jingbo Xu
2024-10-18 20:29 ` Joanne Koong
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=tbkfwtebn4l46cnwoqrf2cm7e5r5ndy7zj2bvdnk4n2q7yk5xh@gmno3qfufaur \
--to=shakeel.butt@linux.dev \
--cc=bernd.schubert@fastmail.fm \
--cc=hannes@cmpxchg.org \
--cc=jefflexu@linux.alibaba.com \
--cc=joannelkoong@gmail.com \
--cc=josef@toxicpanda.com \
--cc=kernel-team@meta.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=miklos@szeredi.hu \
/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