From: "Lukáš Czerner" <lczerner@redhat.com>
To: Eric Whitney <enwlinux@gmail.com>
Cc: linux-ext4@vger.kernel.org, tytso@mit.edu
Subject: Re: [PATCH] ext4: fix loss of delalloc extent info in ext4_zero_range()
Date: Mon, 23 Mar 2015 11:44:19 +0100 (CET) [thread overview]
Message-ID: <alpine.LFD.2.00.1503231138110.1578@localhost.localdomain> (raw)
In-Reply-To: <20150320235350.GA10101@wallace>
On Fri, 20 Mar 2015, Eric Whitney wrote:
> Date: Fri, 20 Mar 2015 19:53:50 -0400
> From: Eric Whitney <enwlinux@gmail.com>
> To: linux-ext4@vger.kernel.org
> Cc: tytso@mit.edu
> Subject: [PATCH] ext4: fix loss of delalloc extent info in ext4_zero_range()
>
> In ext4_zero_range(), removing a file's entire block range from the
> extent status tree removes all records of that file's delalloc extents.
> The delalloc accounting code uses this information, and its loss can
> then lead to accounting errors and kernel warnings at writeback time and
> subsequent file system damage. This is most noticeable on bigalloc
> file systems where code in ext4_ext_map_blocks() handles cases where
> delalloc extents share clusters with a newly allocated extent.
>
> Because we're not deleting a block range and are correctly updating the
> status of its associated extent, there is no need to remove anything
> from the extent status tree.
>
> When this patch is combined with an unrelated bug fix for
> ext4_zero_range(), kernel warnings and e2fsck errors reported during
> xfstests runs on bigalloc filesystems are greatly reduced without
> introducing regressions on other xfstests-bld test scenarios.
Ah, this is my bad sorry. I didn't realize that we're actually
relying on the delayed extent information in the extent status tree
now.
However I remember that I've seen some problems when this extent
removal was not there (see the comment you removed). I am not
entirely sure anymore what it was all about, but I need to retest
with your patch.
Thanks!
-Lukas
>
> Signed-off-by: Eric Whitney <enwlinux@gmail.com>
> ---
> fs/ext4/extents.c | 13 -------------
> 1 file changed, 13 deletions(-)
>
> diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
> index bed4308..c187cc3 100644
> --- a/fs/ext4/extents.c
> +++ b/fs/ext4/extents.c
> @@ -4847,19 +4847,6 @@ static long ext4_zero_range(struct file *file, loff_t offset,
> flags, mode);
> if (ret)
> goto out_dio;
> - /*
> - * Remove entire range from the extent status tree.
> - *
> - * ext4_es_remove_extent(inode, lblk, max_blocks) is
> - * NOT sufficient. I'm not sure why this is the case,
> - * but let's be conservative and remove the extent
> - * status tree for the entire inode. There should be
> - * no outstanding delalloc extents thanks to the
> - * filemap_write_and_wait_range() call above.
> - */
> - ret = ext4_es_remove_extent(inode, 0, EXT_MAX_BLOCKS);
> - if (ret)
> - goto out_dio;
> }
> if (!partial_begin && !partial_end)
> goto out_dio;
>
next prev parent reply other threads:[~2015-03-23 10:44 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-20 23:53 [PATCH] ext4: fix loss of delalloc extent info in ext4_zero_range() Eric Whitney
2015-03-23 10:44 ` Lukáš Czerner [this message]
2015-03-23 17:55 ` Eric Whitney
2015-04-03 4:14 ` Theodore Ts'o
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=alpine.LFD.2.00.1503231138110.1578@localhost.localdomain \
--to=lczerner@redhat.com \
--cc=enwlinux@gmail.com \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
/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