From: Matthew Wilcox <willy@infradead.org>
To: Christoph Hellwig <hch@infradead.org>
Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org, Jan Kara <jack@suse.com>,
David Howells <dhowells@redhat.com>
Subject: Re: [PATCH 03/12] writeback: Factor should_writeback_folio() out of write_cache_pages()
Date: Tue, 27 Jun 2023 12:16:34 +0100 [thread overview]
Message-ID: <ZJrFEto4BbLB+ubt@casper.infradead.org> (raw)
In-Reply-To: <ZJphl4Ws4QzitTny@infradead.org>
On Mon, Jun 26, 2023 at 09:12:07PM -0700, Christoph Hellwig wrote:
> > + if (folio_test_writeback(folio)) {
> > + if (wbc->sync_mode != WB_SYNC_NONE)
> > + folio_wait_writeback(folio);
> > + else
> > + return false;
> > + }
>
> Please reorder this to avoid the else and return earlier while you're
> at it:
>
> if (folio_test_writeback(folio)) {
> if (wbc->sync_mode == WB_SYNC_NONE)
> return false;
> folio_wait_writeback(folio);
> }
Sure, that makes sense.
> (that's what actually got me started on my little cleanup spree while
> checking some details of the writeback waiting..)
This might be a good point to share that I'm considering (eventually)
not taking the folio lock here.
My plan looks something like this (not fully baked):
truncation (and similar) paths currently lock the folio, They would both
lock the folio _and_ claim that they were doing writeback on the folio.
Filesystems would receive the folio from the writeback iterator with
the writeback flag already set.
This allows, eg, folio mapping/unmapping to take place completely
independent of writeback. That seems like a good thing; I can't see
why the two should be connected.
> > + BUG_ON(folio_test_writeback(folio));
> > + if (!folio_clear_dirty_for_io(folio))
> > + return false;
> > +
> > + return true;
>
> ..
>
> return folio_clear_dirty_for_io(folio);
>
> ?
I did consider that, but there's a nice symmetry to the code the way it's
currently written, and that took precedence in my mind over "fewer lines
of code". There's nothing intrinsic about folio_clear_dirty_for_io()
being the last condition to be checked (is there? We have to
redirty_for_io if we decide to not start writeback), so it seemed to
make sense to leave space to add more conditions.
next prev parent reply other threads:[~2023-06-27 11:16 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-26 17:35 [PATCH 00/12] Convert write_cache_pages() to an iterator Matthew Wilcox (Oracle)
2023-06-26 17:35 ` [PATCH 01/12] writeback: Factor out writeback_finish() Matthew Wilcox (Oracle)
2023-06-27 4:05 ` Christoph Hellwig
2023-06-26 17:35 ` [PATCH 02/12] writeback: Factor writeback_get_batch() out of write_cache_pages() Matthew Wilcox (Oracle)
2023-06-26 17:35 ` [PATCH 03/12] writeback: Factor should_writeback_folio() " Matthew Wilcox (Oracle)
2023-06-27 4:12 ` Christoph Hellwig
2023-06-27 11:16 ` Matthew Wilcox [this message]
2023-06-27 14:48 ` Matthew Wilcox
2023-06-26 17:35 ` [PATCH 04/12] writeback: Simplify the loops in write_cache_pages() Matthew Wilcox (Oracle)
2023-06-27 4:16 ` Christoph Hellwig
2023-06-26 17:35 ` [PATCH 05/12] pagevec: Add ability to iterate a queue Matthew Wilcox (Oracle)
2023-06-26 17:35 ` [PATCH 06/12] writeback: Use the folio_batch queue iterator Matthew Wilcox (Oracle)
2023-06-27 4:25 ` Christoph Hellwig
2023-06-26 17:35 ` [PATCH 07/12] writeback: Factor writeback_iter_init() out of write_cache_pages() Matthew Wilcox (Oracle)
2023-06-27 4:30 ` Christoph Hellwig
2023-06-27 4:31 ` Christoph Hellwig
2023-06-27 11:08 ` Matthew Wilcox
2023-06-26 17:35 ` [PATCH 08/12] writeback: Factor writeback_get_folio() " Matthew Wilcox (Oracle)
2023-06-27 4:34 ` Christoph Hellwig
2023-06-27 15:25 ` Matthew Wilcox
2023-06-26 17:35 ` [PATCH 09/12] writeback: Factor writeback_iter_next() " Matthew Wilcox (Oracle)
2023-06-27 4:39 ` Christoph Hellwig
2023-06-27 15:31 ` Matthew Wilcox
2023-06-27 16:28 ` Christoph Hellwig
2023-06-28 9:10 ` Jan Kara
2023-06-26 17:35 ` [PATCH 10/12] writeback: Add for_each_writeback_folio() Matthew Wilcox (Oracle)
2023-06-26 17:35 ` [PATCH 11/12] iomap: Convert iomap_writepages() to use for_each_writeback_folio() Matthew Wilcox (Oracle)
2023-06-26 17:35 ` [PATCH 12/12] writeback: Remove a use of write_cache_pages() from do_writepages() Matthew Wilcox (Oracle)
2023-06-27 4:03 ` [PATCH 00/12] Convert write_cache_pages() to an iterator Christoph Hellwig
2023-06-27 10:53 ` David Howells
2023-06-28 19:31 ` Matthew Wilcox
2023-06-28 20:03 ` David Howells
2023-07-04 18:08 ` Matthew Wilcox
2023-12-12 7:46 ` Christoph Hellwig
2023-11-21 5:18 ` 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=ZJrFEto4BbLB+ubt@casper.infradead.org \
--to=willy@infradead.org \
--cc=dhowells@redhat.com \
--cc=hch@infradead.org \
--cc=jack@suse.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.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 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.