From: Zhihao Cheng <chengzhihao1@huawei.com>
To: Christoph Hellwig <hch@lst.de>
Cc: <viro@zeniv.linux.org.uk>, <torvalds@linux-foundation.org>,
<linux-fsdevel@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<yukuai3@huawei.com>
Subject: Re: [PATCH] fs-writeback: Flush plug before next iteration in wb_writeback()
Date: Sat, 16 Apr 2022 16:41:35 +0800 [thread overview]
Message-ID: <71acc295-3a5b-176d-a58e-2aa3ba7627d6@huawei.com> (raw)
In-Reply-To: <20220416054214.GA7386@lst.de>
在 2022/4/16 13:42, Christoph Hellwig 写道:
>> I think the root cause is fsync gets buffer head's lock without locking
>> corresponding page, fixing 'progess' and flushing plug are both
>> workarounds.
>
> So let's fix that.
>
I think adding page lock before locking buffer head is a little
difficult and risky:
1. There are too many places getting buffer head before submitting bio,
and not all filesystems behave same in readpage/writepage/write_inode.
For example, ntfs_read_block() has locked page before locking buffer
head and then submitting bh, ext4(no journal) and fat may lock buffer
head without locking page while writing inode. It's a huge work to check
all places.
2. Import page lock before locking buffer head may bring new unknown
problem(other deadlocks about page ?). Taking page lock before locking
buffer head(in all processes which can be concurrent with wb_writeback)
is a dangerous thing.
So, how about applying the safe and simple method(flush plug) for the
time being?
PS: Maybe someday buffer head is removed from all filesystems, then we
can remove this superfluous blk_flush_plug.
next prev parent reply other threads:[~2022-04-16 8:42 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-15 1:37 [PATCH] fs-writeback: Flush plug before next iteration in wb_writeback() Zhihao Cheng
2022-04-15 6:39 ` Christoph Hellwig
2022-04-15 8:39 ` Zhihao Cheng
2022-04-16 5:42 ` Christoph Hellwig
2022-04-16 8:41 ` Zhihao Cheng [this message]
2022-04-18 5:00 ` Christoph Hellwig
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=71acc295-3a5b-176d-a58e-2aa3ba7627d6@huawei.com \
--to=chengzhihao1@huawei.com \
--cc=hch@lst.de \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
--cc=yukuai3@huawei.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).