linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Baolin Wang <baolin.wang@linux.alibaba.com>
To: Miklos Szeredi <miklos@szeredi.hu>
Cc: Peng Tao <tao.peng@linux.alibaba.com>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/2] fuse: Fix possible deadlock when writing back dirty pages
Date: Wed, 14 Apr 2021 17:22:34 +0800	[thread overview]
Message-ID: <0fdb09fa-9b0f-1115-2540-6016ce664370@linux.alibaba.com> (raw)
In-Reply-To: <CAJfpegsurP8JshxFah0vCwBQicc0ijRnGyLeZZ-4tio6BHqEzQ@mail.gmail.com>



在 2021/4/14 17:02, Miklos Szeredi 写道:
> On Wed, Apr 14, 2021 at 10:42 AM Baolin Wang
> <baolin.wang@linux.alibaba.com> wrote:
> 
>> Sorry I missed this patch before, and I've tested this patch, it seems
>> can solve the deadlock issue I met before.
> 
> Great, thanks for testing.
> 
>> But look at this patch in detail, I think this patch only reduced the
>> deadlock window, but did not remove the possible deadlock scenario
>> completely like I explained in the commit log.
>>
>> Since the fuse_fill_write_pages() can still lock the partitail page in
>> your patch, and will be wait for the partitail page waritehack is
>> completed if writeback is set in fuse_send_write_pages().
>>
>> But at the same time, a writeback worker thread may be waiting for
>> trying to lock the partitail page to write a bunch of dirty pages by
>> fuse_writepages().
> 
> As you say, fuse_fill_write_pages() will lock a partial page.  This
> page cannot become dirty, only after being read completely, which
> first requires the page lock.  So dirtying this page can only happen
> after the writeback of the fragment was completed.

What I mean is the writeback worker had looked up the dirty pages in 
write_cache_pages() and stored them into a temporary pagevec, then try 
to lock dirty page one by one and write them.

For example, suppose it looked up 2 dirty pages (named page 1 and page 
2), and writed down page 1 by fuse_writepages_fill(), unlocked page 1. 
Then try to lock page 2.

At the same time, suppose the fuse_fill_write_pages() will write the 
same page 1 and partitail page 2, and it will lock partital page 2 and 
wait for the page 1's writeback is completed. But page 1's writeback can 
not be completed, since the writeback worker is waiting for locking page 
2, which was already locked by fuse_fill_write_pages().

Does that make sense to you? Or I missed something else?

  reply	other threads:[~2021-04-14  9:22 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-27  6:36 [PATCH v2 1/2] fuse: Fix possible deadlock when writing back dirty pages Baolin Wang
2021-03-27  6:36 ` [PATCH v2 2/2] fuse: Remove unused parameter Baolin Wang
2021-04-12 13:23 ` [PATCH v2 1/2] fuse: Fix possible deadlock when writing back dirty pages Baolin Wang
2021-04-13  8:57   ` Miklos Szeredi
2021-04-14  8:42     ` Baolin Wang
2021-04-14  9:02       ` Miklos Szeredi
2021-04-14  9:22         ` Baolin Wang [this message]
2021-04-14  9:47           ` Miklos Szeredi
2021-04-14 10:18             ` Baolin Wang
2021-04-14 12:22     ` Peng Tao
2021-04-14 13:20       ` Miklos Szeredi
2021-04-15 12:30         ` Peng Tao

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=0fdb09fa-9b0f-1115-2540-6016ce664370@linux.alibaba.com \
    --to=baolin.wang@linux.alibaba.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=tao.peng@linux.alibaba.com \
    /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).