From: Matthew Wilcox <willy@infradead.org>
To: Andreas Gruenbacher <agruenba@redhat.com>
Cc: linux-fsdevel <linux-fsdevel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Bob Peterson <rpeterso@redhat.com>,
cluster-devel <cluster-devel@redhat.com>,
Hannes Reinecke <hare@suse.com>,
Luis Chamberlain <mcgrof@kernel.org>
Subject: Re: [PATCH 3/6] gfs2: Convert gfs2_write_jdata_page() to gfs2_write_jdata_folio()
Date: Sun, 4 Jun 2023 04:35:34 +0100 [thread overview]
Message-ID: <ZHwGhsDPYZQlYksK@casper.infradead.org> (raw)
In-Reply-To: <CAHc6FU4G1F1OXC233hT7_Vog9F8GNZyeLwsi+01USSXhFBNc_A@mail.gmail.com>
On Sat, Jun 03, 2023 at 11:34:14AM +0200, Andreas Gruenbacher wrote:
> > * This is the same as calling block_write_full_page, but it also
> > * writes pages outside of i_size
> > */
> > -static int gfs2_write_jdata_page(struct page *page,
> > +static int gfs2_write_jdata_folio(struct folio *folio,
> > struct writeback_control *wbc)
> > {
> > - struct inode * const inode = page->mapping->host;
> > + struct inode * const inode = folio->mapping->host;
> > loff_t i_size = i_size_read(inode);
> > - const pgoff_t end_index = i_size >> PAGE_SHIFT;
> > - unsigned offset;
> >
> > + if (folio_pos(folio) >= i_size)
> > + return 0;
>
> Function gfs2_write_jdata_page was originally introduced as
> gfs2_write_full_page in commit fd4c5748b8d3 ("gfs2: writeout truncated
> pages") to allow writing pages even when they are beyond EOF, as the
> function description documents.
Well, that was stupid of me.
> This hack was added because simply skipping journaled pages isn't
> enough on gfs2; before a journaled page can be freed, it needs to be
> marked as "revoked" in the journal. Journal recovery will then skip
> the revoked blocks, which allows them to be reused for regular,
> non-journaled data. We can end up here in contexts in which we cannot
> "revoke" pages, so instead, we write the original pages even when they
> are beyond EOF. This hack could be revisited, but it's pretty nasty
> code to pick apart.
>
> So at least the above if needs to go for now.
Understood. So we probably don't want to waste time zeroing the folio
if it is entirely beyond i_size, right? Because at the moment we'd
zero some essentially random part of the folio if I just take out the
check. Should it look like this?
if (folio_pos(folio) < i_size &&
i_size < folio_pos(folio) + folio_size(folio))
folio_zero_segment(folio, offset_in_folio(folio, i_size),
folio_size(folio));
next prev parent reply other threads:[~2023-06-04 3:35 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-17 3:24 [PATCH 0/6] gfs2/buffer folio changes Matthew Wilcox (Oracle)
2023-05-17 3:24 ` [PATCH 1/6] gfs2: Use a folio inside gfs2_jdata_writepage() Matthew Wilcox (Oracle)
2023-05-17 3:24 ` [PATCH 2/6] gfs2: Pass a folio to __gfs2_jdata_write_folio() Matthew Wilcox (Oracle)
2023-05-17 3:24 ` [PATCH 3/6] gfs2: Convert gfs2_write_jdata_page() to gfs2_write_jdata_folio() Matthew Wilcox (Oracle)
2023-06-03 9:34 ` Andreas Gruenbacher
2023-06-04 3:35 ` Matthew Wilcox [this message]
2023-06-04 7:27 ` Andreas Gruenbacher
2023-05-17 3:24 ` [PATCH 4/6] buffer: Convert __block_write_full_page() to __block_write_full_folio() Matthew Wilcox (Oracle)
[not found] ` <CGME20230517144703eucas1p1550db888e29fc5b182c202f24adddb87@eucas1p1.samsung.com>
2023-05-17 14:47 ` Pankaj Raghav
2023-05-17 15:43 ` Matthew Wilcox
2023-05-17 3:24 ` [PATCH 5/6] gfs2: Support ludicrously large folios in gfs2_trans_add_databufs() Matthew Wilcox (Oracle)
2023-05-23 12:46 ` Andreas Gruenbacher
2023-05-23 13:37 ` Matthew Wilcox
2023-06-03 9:46 ` Andreas Gruenbacher
2023-05-17 3:24 ` [PATCH 6/6] buffer: Make block_write_full_page() handle large folios correctly Matthew Wilcox (Oracle)
2023-05-17 18:06 ` [PATCH 0/6] gfs2/buffer folio changes Bob Peterson
2023-06-02 12:30 ` Bob Peterson
2023-06-02 13:25 ` Bob Peterson
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=ZHwGhsDPYZQlYksK@casper.infradead.org \
--to=willy@infradead.org \
--cc=agruenba@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=cluster-devel@redhat.com \
--cc=hare@suse.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=mcgrof@kernel.org \
--cc=rpeterso@redhat.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).