All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Whitney <enwlinux@gmail.com>
To: Eric Whitney <enwlinux@gmail.com>,
	linux-ext4@vger.kernel.org, tytso@mit.edu
Subject: Re: possible dev branch regression - xfstest 285/1k
Date: Sat, 16 Mar 2013 23:36:08 -0400	[thread overview]
Message-ID: <20130317033608.GA2757@rocky> (raw)
In-Reply-To: <20130316150923.GA18589@gmail.com>

* Zheng Liu <gnehzuil.liu@gmail.com>:
> On Fri, Mar 15, 2013 at 06:28:18PM -0400, Eric Whitney wrote:
> > I'm seeing Xfstest 285 consistently fail for the 1k test case using the
> > latest dev branch while running on both x86 and ARM.  Subtest 08 is
> > the problem. From the test output:
> > 
> > 08. Test file with unwritten extents, only have unwritten pages
> > 08.01 SEEK_HOLE expected 0 or 4194304, got 11264.                 FAIL
> > 08.02 SEEK_HOLE expected 1 or 4194304, got 11264.                 FAIL
> > 08.03 SEEK_DATA expected 10240 or 10240, got 0.                   FAIL
> > 08.04 SEEK_DATA expected 10240 or 10240, got 1.                   FAIL
> > 
> > From previous discussions, we expect 285 to fail in the ext3 (nodelalloc,
> > no flex_bg, and no extents) test case, but in subtest 07.  It still does
> > that.
> > 
> > In the dev branch, reverting 4f42f80a8f - "ext4: use s_extent_max_zeroout_kb
> > value as number of kb" - results in success for 285 in the 1k test case.
> 
> Hi Eric,
> 
> I see what's going on.  First of all it isn't a bug. :-)  Please let me
> describe why it happens.
> 
> In this commit (4f42f80a8f), it tries to fix a bug that we never zero
> out an unwritten extent.  So after applied it, when an unwritten extent
> is converted, it could be zeroed out.  In xfstests #285 subtest 08 it
> preallocates an unwritten extent which is 4MB.  Then it writes some data
> at offset 10 * blocksize, which the length is one blocksize, and calles
> sync_file_range(2) to flush it.  So the call trace looks like:
> 
> ext4_fallocate()
>   ->ext4_map_blocks()
>     [one unwritten extent is allocated]
> ext4_file_write()
> ext4_da_writepages()
>   ->ext4_map_blocks() with EXT4_GET_BLOCKS_CREATE flag
>     ->ext4_ext_handle_uninitialized_extents()
>       ->ext4_ext_convert_to_initialized()
> 
> In ext4_ext_convert_to_initialized() it tries to zero out unwritten
> extent if condition is matched.  Let's see what happens.
> 
> case a) 1k block size
>   max_zeroout: 32
>   ee_len: 4096
>   allocated: 4086
>   m_len: 1
> 
> In this case, the following condition is matched.
> 
> fs/ext4/extents.c:3310
> 
>         else if (map->m_lblk - ee_block + map-m_len < max_zeroout)
>                  10          - 0        + 1         < 32
> 
> So unwritten extent [0,11] will be converted to written.  That is why
> 11264 (11 * 1k) is returned when we seek a hole from offset 0 and 1,
> and 0 and 1 are returned when we seek a data from offset 0 and 1.
> 
> case b) 4k block size
>   max_zeroout: 8
>   ee_len: 1024
>   allocated: 1014
>   m_len: 1
> 
> In this case, the above condition won't be matched.
> 
>         else if (map->m_lblk - ee_block + map-m_len < max_zeroout)
>                  10          - 0        + 1         < 8
> 
> So only one unwritten extent [10, 1] is converted, and the test can
> pass.
> 

Hi Zheng:

Thanks very much for taking the time to look at this and for your clear
explanation - much appreciated.  I'm happy to hear there's no reason to be
concerned about a regression, and that 4f42f80a8f simply exposed another
problem in xfstest 285 when applied to ext4.

Thanks,
Eric


      parent reply	other threads:[~2013-03-17  3:36 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-15 22:28 possible dev branch regression - xfstest 285/1k Eric Whitney
2013-03-16  2:32 ` Zheng Liu
2013-03-16 15:09 ` Zheng Liu
2013-03-17  3:06   ` Theodore Ts'o
2013-03-17  6:13     ` Zheng Liu
2013-03-18 16:10     ` Eric Sandeen
2013-03-18 16:54       ` gnehzuil.liu
2013-03-18 17:09       ` Theodore Ts'o
2013-03-18 17:34         ` Eric Sandeen
2013-03-18 17:34           ` Eric Sandeen
2013-03-18 20:41           ` Ben Myers
2013-03-18 23:12             ` Dave Chinner
2013-03-18 23:12               ` Dave Chinner
2013-03-19  1:40               ` Theodore Ts'o
2013-03-19  2:07                 ` Dave Chinner
2013-03-19  2:07                   ` Dave Chinner
2013-03-19  1:47               ` Dave Chinner
2013-03-19  1:47                 ` Dave Chinner
2013-03-19  2:00                 ` Theodore Ts'o
2013-03-19  2:22                   ` Dave Chinner
2013-03-19  2:22                     ` Dave Chinner
2013-03-19  2:28                   ` Eric Sandeen
2013-03-19  8:50                     ` Lukáš Czerner
2013-03-19  8:50                     ` Lukáš Czerner
2013-03-17  3:36   ` Eric Whitney [this message]

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=20130317033608.GA2757@rocky \
    --to=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 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.