public inbox for fstests@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported
@ 2017-07-18  8:27 Xiao Yang
  2017-07-18 13:18 ` Eryu Guan
  0 siblings, 1 reply; 12+ messages in thread
From: Xiao Yang @ 2017-07-18  8:27 UTC (permalink / raw)
  To: fstests; +Cc: Xiao Yang

On some old kernel(e.g. v3.5), this case fails because it can not create
extent_max_zeroout_kb file, as below:
  Silence is golden
 +./tests/generic/448: line 54: /sys/fs/ext4/sda5/extent_max_zeroout_kb: No such file or directory
  seek sanity check failed!

The extent_max_zeroout_kb file is introduced by:
  67a5da564f97('ext4: make the zero-out chunk size tunable')

We should only disable extent zeroing when extent_max_zeroout_kb is supported.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 tests/generic/448 | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tests/generic/448 b/tests/generic/448
index 87b99d7..3e92742 100755
--- a/tests/generic/448
+++ b/tests/generic/448
@@ -51,7 +51,8 @@ _require_test_program "seek_sanity_test"
 # Disable extent zeroing for ext4 as that change where holes are created
 if [ "$FSTYP" = "ext4" ]; then
 	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
+	[ -f /sys/fs/ext4/$DEV/extent_max_zeroout_kb ] \
+	&& echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
 fi
 
 $here/src/seek_sanity_test -s 18 -e 18 $BASE_TEST_FILE > $seqres.full 2>&1 ||
-- 
1.8.3.1




^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported
  2017-07-18  8:27 [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported Xiao Yang
@ 2017-07-18 13:18 ` Eryu Guan
  2017-07-19  2:35   ` Xiao Yang
                     ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Eryu Guan @ 2017-07-18 13:18 UTC (permalink / raw)
  To: Xiao Yang; +Cc: fstests

On Tue, Jul 18, 2017 at 04:27:50PM +0800, Xiao Yang wrote:
> On some old kernel(e.g. v3.5), this case fails because it can not create
> extent_max_zeroout_kb file, as below:
>   Silence is golden
>  +./tests/generic/448: line 54: /sys/fs/ext4/sda5/extent_max_zeroout_kb: No such file or directory
>   seek sanity check failed!
> 
> The extent_max_zeroout_kb file is introduced by:
>   67a5da564f97('ext4: make the zero-out chunk size tunable')

This is available since v3.7-rc1 kernel
$ git describe --contains 67a5da564f97
v3.7-rc1~91^2~63

But ext4 SEEK_DATA/SEEK_HOLE support was added in v3.8-rc1
$ git describe --contains c8c0df241cc2
v3.8-rc1~89^2~40

IMO, you shouldn't hit this error at all, because test won't pass
_require_seek_data_hole rule. (Unless you're testing some customized
kernel with seek_data/hole backported but not that ext4 sysfs entry.)

> 
> We should only disable extent zeroing when extent_max_zeroout_kb is supported.
> 
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> ---
>  tests/generic/448 | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/generic/448 b/tests/generic/448
> index 87b99d7..3e92742 100755
> --- a/tests/generic/448
> +++ b/tests/generic/448
> @@ -51,7 +51,8 @@ _require_test_program "seek_sanity_test"
>  # Disable extent zeroing for ext4 as that change where holes are created
>  if [ "$FSTYP" = "ext4" ]; then
>  	DEV=`_short_dev $TEST_DEV`
> -	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
> +	[ -f /sys/fs/ext4/$DEV/extent_max_zeroout_kb ] \
> +	&& echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb

But I'm OK with adding this check, but not in this test only, this
pattern is repeated in several seek_data/hole tests, e.g.
generic/285, generic/436, generic/445 generic/448, and generic/009
(which is not a seek_data/hole test).

So I'm wondering if this hunk of code can be made into a helper and
embed it into _require_seek_data_hole. e.g. (completely untested)

# Disable extent zeroing for ext4 on the given device
_ext4_disable_extent_zeroout()
{
	local dev=${1:-$TEST_DEV}
	local sdev=`_short_dev $dev`

	[ -f /sys/fs/ext4/$sdev/extent_max_zeroout_kb ] \
	&& echo 0 >/sys/fs/ext4/$sdev/extent_max_zeroout_kb
}

And _require_seek_data_hole

_require_seek_data_hole()
{
	local dev=${1:-$TEST_DEV}
	local testfile=$TEST_DIR/$$.seek

	testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
	rm -f $testfile &>/dev/null
	echo $testseek | grep -q "Kernel does not support" && \
	    _notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
	# Disable extent zeroing for ext4 as that change where holes are
	# created
	if [ "$FSTYP" == "ext4" ]; then
		_ext4_disable_extent_zeroout $dev
	fi
}

And update generic/009 accordingly to use this new helper.

What do you and/or other people think?

Thanks,
Eryu

>  fi
>  
>  $here/src/seek_sanity_test -s 18 -e 18 $BASE_TEST_FILE > $seqres.full 2>&1 ||
> -- 
> 1.8.3.1
> 
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported
  2017-07-18 13:18 ` Eryu Guan
@ 2017-07-19  2:35   ` Xiao Yang
  2017-07-19  9:56     ` Eryu Guan
  2017-07-19  3:06   ` [PATCH] common/rc: update _require_seek_data_hole() Xiao Yang
  2017-07-24  7:13   ` [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported Xiao Yang
  2 siblings, 1 reply; 12+ messages in thread
From: Xiao Yang @ 2017-07-19  2:35 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests

On 2017/07/18 21:18, Eryu Guan wrote:
> On Tue, Jul 18, 2017 at 04:27:50PM +0800, Xiao Yang wrote:
>> On some old kernel(e.g. v3.5), this case fails because it can not create
>> extent_max_zeroout_kb file, as below:
>>    Silence is golden
>>   +./tests/generic/448: line 54: /sys/fs/ext4/sda5/extent_max_zeroout_kb: No such file or directory
>>    seek sanity check failed!
>>
>> The extent_max_zeroout_kb file is introduced by:
>>    67a5da564f97('ext4: make the zero-out chunk size tunable')
> This is available since v3.7-rc1 kernel
> $ git describe --contains 67a5da564f97
> v3.7-rc1~91^2~63
>
> But ext4 SEEK_DATA/SEEK_HOLE support was added in v3.8-rc1
> $ git describe --contains c8c0df241cc2
> v3.8-rc1~89^2~40
>
> IMO, you shouldn't hit this error at all, because test won't pass
> _require_seek_data_hole rule. (Unless you're testing some customized
> kernel with seek_data/hole backported but not that ext4 sysfs entry.)
Hi Eryu

Thanks for your explanation.

I test it in v3.5 kernel without seek_data/hole backported, please see 
the following message:
[root@localhost xfstests]# uname -r
3.5.0
[root@localhost xfstests]# src/seek_sanity_test -t 
/mnt/xfstests/test/testfile 2>&1
File system magic#: 0xef53
Allocation size: 4096
File system supports the default behavior.
File system does not support unwritten extents.

_require_seek_data_hole could not catch "File system does not support" 
if ext4 SEEK_DATA/SEEK_HOLE
support was not added.

I think we should update  _require_seek_data_hole to catch both "Kernel 
does not support" and
"File system does not support".   This case could be skipped when 
meetting either of them.

Thanks,
Xiao Yang
>> We should only disable extent zeroing when extent_max_zeroout_kb is supported.
>>
>> Signed-off-by: Xiao Yang<yangx.jy@cn.fujitsu.com>
>> ---
>>   tests/generic/448 | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/tests/generic/448 b/tests/generic/448
>> index 87b99d7..3e92742 100755
>> --- a/tests/generic/448
>> +++ b/tests/generic/448
>> @@ -51,7 +51,8 @@ _require_test_program "seek_sanity_test"
>>   # Disable extent zeroing for ext4 as that change where holes are created
>>   if [ "$FSTYP" = "ext4" ]; then
>>   	DEV=`_short_dev $TEST_DEV`
>> -	echo 0>/sys/fs/ext4/$DEV/extent_max_zeroout_kb
>> +	[ -f /sys/fs/ext4/$DEV/extent_max_zeroout_kb ] \
>> +	&&  echo 0>/sys/fs/ext4/$DEV/extent_max_zeroout_kb
> But I'm OK with adding this check, but not in this test only, this
> pattern is repeated in several seek_data/hole tests, e.g.
> generic/285, generic/436, generic/445 generic/448, and generic/009
> (which is not a seek_data/hole test).
>
> So I'm wondering if this hunk of code can be made into a helper and
> embed it into _require_seek_data_hole. e.g. (completely untested)
>
> # Disable extent zeroing for ext4 on the given device
> _ext4_disable_extent_zeroout()
> {
> 	local dev=${1:-$TEST_DEV}
> 	local sdev=`_short_dev $dev`
>
> 	[ -f /sys/fs/ext4/$sdev/extent_max_zeroout_kb ] \
> 	&&  echo 0>/sys/fs/ext4/$sdev/extent_max_zeroout_kb
> }
>
> And _require_seek_data_hole
>
> _require_seek_data_hole()
> {
> 	local dev=${1:-$TEST_DEV}
> 	local testfile=$TEST_DIR/$$.seek
>
> 	testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
> 	rm -f $testfile&>/dev/null
> 	echo $testseek | grep -q "Kernel does not support"&&  \
> 	    _notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
> 	# Disable extent zeroing for ext4 as that change where holes are
> 	# created
> 	if [ "$FSTYP" == "ext4" ]; then
> 		_ext4_disable_extent_zeroout $dev
> 	fi
> }
>
> And update generic/009 accordingly to use this new helper.
>
> What do you and/or other people think?
>
> Thanks,
> Eryu
>
>>   fi
>>
>>   $here/src/seek_sanity_test -s 18 -e 18 $BASE_TEST_FILE>  $seqres.full 2>&1 ||
>> -- 
>> 1.8.3.1
>>
>>
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe fstests" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
> .
>




^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH] common/rc: update _require_seek_data_hole()
  2017-07-18 13:18 ` Eryu Guan
  2017-07-19  2:35   ` Xiao Yang
@ 2017-07-19  3:06   ` Xiao Yang
  2017-07-24  7:13   ` [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported Xiao Yang
  2 siblings, 0 replies; 12+ messages in thread
From: Xiao Yang @ 2017-07-19  3:06 UTC (permalink / raw)
  To: eguan; +Cc: fstests, Xiao Yang

_require_seek_data_hole() could not skip tests if filesystem does not support
fallocate or unwritten extent.  We could update _require_seek_data_hole() to
catch both of them.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 common/rc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/common/rc b/common/rc
index fa1314c..b064f53 100644
--- a/common/rc
+++ b/common/rc
@@ -2297,7 +2297,7 @@ _require_seek_data_hole()
     testfile=$TEST_DIR/$$.seek
     testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
     rm -f $testfile &>/dev/null
-    echo $testseek | grep -q "Kernel does not support" && \
+    echo $testseek | grep -q "not support" && \
         _notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
 }
 
-- 
1.8.3.1




^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported
  2017-07-19  2:35   ` Xiao Yang
@ 2017-07-19  9:56     ` Eryu Guan
  2017-07-19 10:38       ` Xiao Yang
  0 siblings, 1 reply; 12+ messages in thread
From: Eryu Guan @ 2017-07-19  9:56 UTC (permalink / raw)
  To: Xiao Yang; +Cc: fstests

On Wed, Jul 19, 2017 at 10:35:01AM +0800, Xiao Yang wrote:
> On 2017/07/18 21:18, Eryu Guan wrote:
> > On Tue, Jul 18, 2017 at 04:27:50PM +0800, Xiao Yang wrote:
> > > On some old kernel(e.g. v3.5), this case fails because it can not create
> > > extent_max_zeroout_kb file, as below:
> > >    Silence is golden
> > >   +./tests/generic/448: line 54: /sys/fs/ext4/sda5/extent_max_zeroout_kb: No such file or directory
> > >    seek sanity check failed!
> > > 
> > > The extent_max_zeroout_kb file is introduced by:
> > >    67a5da564f97('ext4: make the zero-out chunk size tunable')
> > This is available since v3.7-rc1 kernel
> > $ git describe --contains 67a5da564f97
> > v3.7-rc1~91^2~63
> > 
> > But ext4 SEEK_DATA/SEEK_HOLE support was added in v3.8-rc1
> > $ git describe --contains c8c0df241cc2
> > v3.8-rc1~89^2~40
> > 
> > IMO, you shouldn't hit this error at all, because test won't pass
> > _require_seek_data_hole rule. (Unless you're testing some customized
> > kernel with seek_data/hole backported but not that ext4 sysfs entry.)
> Hi Eryu
> 
> Thanks for your explanation.
> 
> I test it in v3.5 kernel without seek_data/hole backported, please see the
> following message:
> [root@localhost xfstests]# uname -r
> 3.5.0
> [root@localhost xfstests]# src/seek_sanity_test -t
> /mnt/xfstests/test/testfile 2>&1
> File system magic#: 0xef53
> Allocation size: 4096
> File system supports the default behavior.

OK, I see why the test was *not* _notrun on 3.5 kernel now (without
seek_data/hole support added to ext4, but with SEEK_DATA/SEEK_HOLE flags
recognized by vfs, which was introduced by 982d81658 in v3.1-rc1),
because ext4 had the "default behavior" support, and that means "just
return i_size for SEEK_HOLE and will return the same offset for
SEEK_DATA".

> File system does not support unwritten extents.

This means the file system doesn't treat unwritten extents as a hole,
but data, which has nothing to do with SEEK_DATA/HOLE support status.

> 
> _require_seek_data_hole could not catch "File system does not support" if
> ext4 SEEK_DATA/SEEK_HOLE
> support was not added.
> 
> I think we should update  _require_seek_data_hole to catch both "Kernel does
> not support" and
> "File system does not support".   This case could be skipped when meetting
> either of them.

So this is wrong, IMO.

Thanks,
Eryu

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported
  2017-07-19  9:56     ` Eryu Guan
@ 2017-07-19 10:38       ` Xiao Yang
  2017-07-21  7:07         ` Eryu Guan
  0 siblings, 1 reply; 12+ messages in thread
From: Xiao Yang @ 2017-07-19 10:38 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests

On 2017/07/19 17:56, Eryu Guan wrote:
> On Wed, Jul 19, 2017 at 10:35:01AM +0800, Xiao Yang wrote:
>> On 2017/07/18 21:18, Eryu Guan wrote:
>>> On Tue, Jul 18, 2017 at 04:27:50PM +0800, Xiao Yang wrote:
>>>> On some old kernel(e.g. v3.5), this case fails because it can not create
>>>> extent_max_zeroout_kb file, as below:
>>>>     Silence is golden
>>>>    +./tests/generic/448: line 54: /sys/fs/ext4/sda5/extent_max_zeroout_kb: No such file or directory
>>>>     seek sanity check failed!
>>>>
>>>> The extent_max_zeroout_kb file is introduced by:
>>>>     67a5da564f97('ext4: make the zero-out chunk size tunable')
>>> This is available since v3.7-rc1 kernel
>>> $ git describe --contains 67a5da564f97
>>> v3.7-rc1~91^2~63
>>>
>>> But ext4 SEEK_DATA/SEEK_HOLE support was added in v3.8-rc1
>>> $ git describe --contains c8c0df241cc2
>>> v3.8-rc1~89^2~40
>>>
>>> IMO, you shouldn't hit this error at all, because test won't pass
>>> _require_seek_data_hole rule. (Unless you're testing some customized
>>> kernel with seek_data/hole backported but not that ext4 sysfs entry.)
>> Hi Eryu
>>
>> Thanks for your explanation.
>>
>> I test it in v3.5 kernel without seek_data/hole backported, please see the
>> following message:
>> [root@localhost xfstests]# uname -r
>> 3.5.0
>> [root@localhost xfstests]# src/seek_sanity_test -t
>> /mnt/xfstests/test/testfile 2>&1
>> File system magic#: 0xef53
>> Allocation size: 4096
>> File system supports the default behavior.
> OK, I see why the test was *not* _notrun on 3.5 kernel now (without
> seek_data/hole support added to ext4, but with SEEK_DATA/SEEK_HOLE flags
> recognized by vfs, which was introduced by 982d81658 in v3.1-rc1),
> because ext4 had the "default behavior" support, and that means "just
> return i_size for SEEK_HOLE and will return the same offset for
> SEEK_DATA".
>
>> File system does not support unwritten extents.
> This means the file system doesn't treat unwritten extents as a hole,
> but data, which has nothing to do with SEEK_DATA/HOLE support status.
Hi Eryu,

Thanks for your detailed explanation, i got it.

Could you tell me whether generic/448 should be fixed or not?

Thanks,
Xiao Yang
>> _require_seek_data_hole could not catch "File system does not support" if
>> ext4 SEEK_DATA/SEEK_HOLE
>> support was not added.
>>
>> I think we should update  _require_seek_data_hole to catch both "Kernel does
>> not support" and
>> "File system does not support".   This case could be skipped when meetting
>> either of them.
> So this is wrong, IMO.
>
> Thanks,
> Eryu
>
>
> .
>




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported
  2017-07-19 10:38       ` Xiao Yang
@ 2017-07-21  7:07         ` Eryu Guan
  2017-07-24  9:49           ` [PATCH] common/rc: factor out _ext4_disable_extent_zeroout() helper Xiao Yang
  0 siblings, 1 reply; 12+ messages in thread
From: Eryu Guan @ 2017-07-21  7:07 UTC (permalink / raw)
  To: Xiao Yang; +Cc: fstests

On Wed, Jul 19, 2017 at 06:38:01PM +0800, Xiao Yang wrote:
> On 2017/07/19 17:56, Eryu Guan wrote:
> > On Wed, Jul 19, 2017 at 10:35:01AM +0800, Xiao Yang wrote:
> > > On 2017/07/18 21:18, Eryu Guan wrote:
> > > > On Tue, Jul 18, 2017 at 04:27:50PM +0800, Xiao Yang wrote:
> > > > > On some old kernel(e.g. v3.5), this case fails because it can not create
> > > > > extent_max_zeroout_kb file, as below:
> > > > >     Silence is golden
> > > > >    +./tests/generic/448: line 54: /sys/fs/ext4/sda5/extent_max_zeroout_kb: No such file or directory
> > > > >     seek sanity check failed!
> > > > > 
> > > > > The extent_max_zeroout_kb file is introduced by:
> > > > >     67a5da564f97('ext4: make the zero-out chunk size tunable')
> > > > This is available since v3.7-rc1 kernel
> > > > $ git describe --contains 67a5da564f97
> > > > v3.7-rc1~91^2~63
> > > > 
> > > > But ext4 SEEK_DATA/SEEK_HOLE support was added in v3.8-rc1
> > > > $ git describe --contains c8c0df241cc2
> > > > v3.8-rc1~89^2~40
> > > > 
> > > > IMO, you shouldn't hit this error at all, because test won't pass
> > > > _require_seek_data_hole rule. (Unless you're testing some customized
> > > > kernel with seek_data/hole backported but not that ext4 sysfs entry.)
> > > Hi Eryu
> > > 
> > > Thanks for your explanation.
> > > 
> > > I test it in v3.5 kernel without seek_data/hole backported, please see the
> > > following message:
> > > [root@localhost xfstests]# uname -r
> > > 3.5.0
> > > [root@localhost xfstests]# src/seek_sanity_test -t
> > > /mnt/xfstests/test/testfile 2>&1
> > > File system magic#: 0xef53
> > > Allocation size: 4096
> > > File system supports the default behavior.
> > OK, I see why the test was *not* _notrun on 3.5 kernel now (without
> > seek_data/hole support added to ext4, but with SEEK_DATA/SEEK_HOLE flags
> > recognized by vfs, which was introduced by 982d81658 in v3.1-rc1),
> > because ext4 had the "default behavior" support, and that means "just
> > return i_size for SEEK_HOLE and will return the same offset for
> > SEEK_DATA".
> > 
> > > File system does not support unwritten extents.
> > This means the file system doesn't treat unwritten extents as a hole,
> > but data, which has nothing to do with SEEK_DATA/HOLE support status.
> Hi Eryu,
> 
> Thanks for your detailed explanation, i got it.
> 
> Could you tell me whether generic/448 should be fixed or not?

IMHO, as the pure "sysfs entry not found" issue, it's really a low
priority bug to fix, as the bug only exists when vfs recognizes
SEEK_DATA/HOLE flag && ext4 has no extent zeroout tunable in sysfs, so
only 3.1-3.6 kernels suffer from this issue, but they're really old
kernels.

OTOH, factoring out a helper like what I suggested in my first reply
seems reasonable to me, so we don't repeat the same pattern in multiple
tests and we also get the bug fixed. If you send a patch to do this I'm
happy to review it :)

Thanks,
Eryu

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported
  2017-07-18 13:18 ` Eryu Guan
  2017-07-19  2:35   ` Xiao Yang
  2017-07-19  3:06   ` [PATCH] common/rc: update _require_seek_data_hole() Xiao Yang
@ 2017-07-24  7:13   ` Xiao Yang
  2 siblings, 0 replies; 12+ messages in thread
From: Xiao Yang @ 2017-07-24  7:13 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests

On 2017/07/18 21:18, Eryu Guan wrote:
> On Tue, Jul 18, 2017 at 04:27:50PM +0800, Xiao Yang wrote:
>> On some old kernel(e.g. v3.5), this case fails because it can not create
>> extent_max_zeroout_kb file, as below:
>>    Silence is golden
>>   +./tests/generic/448: line 54: /sys/fs/ext4/sda5/extent_max_zeroout_kb: No such file or directory
>>    seek sanity check failed!
>>
>> The extent_max_zeroout_kb file is introduced by:
>>    67a5da564f97('ext4: make the zero-out chunk size tunable')
> This is available since v3.7-rc1 kernel
> $ git describe --contains 67a5da564f97
> v3.7-rc1~91^2~63
>
> But ext4 SEEK_DATA/SEEK_HOLE support was added in v3.8-rc1
> $ git describe --contains c8c0df241cc2
> v3.8-rc1~89^2~40
>
> IMO, you shouldn't hit this error at all, because test won't pass
> _require_seek_data_hole rule. (Unless you're testing some customized
> kernel with seek_data/hole backported but not that ext4 sysfs entry.)
>
>> We should only disable extent zeroing when extent_max_zeroout_kb is supported.
>>
>> Signed-off-by: Xiao Yang<yangx.jy@cn.fujitsu.com>
>> ---
>>   tests/generic/448 | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/tests/generic/448 b/tests/generic/448
>> index 87b99d7..3e92742 100755
>> --- a/tests/generic/448
>> +++ b/tests/generic/448
>> @@ -51,7 +51,8 @@ _require_test_program "seek_sanity_test"
>>   # Disable extent zeroing for ext4 as that change where holes are created
>>   if [ "$FSTYP" = "ext4" ]; then
>>   	DEV=`_short_dev $TEST_DEV`
>> -	echo 0>/sys/fs/ext4/$DEV/extent_max_zeroout_kb
>> +	[ -f /sys/fs/ext4/$DEV/extent_max_zeroout_kb ] \
>> +	&&  echo 0>/sys/fs/ext4/$DEV/extent_max_zeroout_kb
> But I'm OK with adding this check, but not in this test only, this
> pattern is repeated in several seek_data/hole tests, e.g.
> generic/285, generic/436, generic/445 generic/448, and generic/009
> (which is not a seek_data/hole test).
>
> So I'm wondering if this hunk of code can be made into a helper and
> embed it into _require_seek_data_hole. e.g. (completely untested)
>
> # Disable extent zeroing for ext4 on the given device
> _ext4_disable_extent_zeroout()
> {
> 	local dev=${1:-$TEST_DEV}
> 	local sdev=`_short_dev $dev`
>
> 	[ -f /sys/fs/ext4/$sdev/extent_max_zeroout_kb ] \
> 	&&  echo 0>/sys/fs/ext4/$sdev/extent_max_zeroout_kb
> }
>
> And _require_seek_data_hole
>
> _require_seek_data_hole()
> {
> 	local dev=${1:-$TEST_DEV}
> 	local testfile=$TEST_DIR/$$.seek
>
> 	testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
> 	rm -f $testfile&>/dev/null
> 	echo $testseek | grep -q "Kernel does not support"&&  \
> 	    _notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
> 	# Disable extent zeroing for ext4 as that change where holes are
> 	# created
> 	if [ "$FSTYP" == "ext4" ]; then
> 		_ext4_disable_extent_zeroout $dev
> 	fi
> }
>
> And update generic/009 accordingly to use this new helper.
>
> What do you and/or other people think?
Hi Eryu,

I am sorry for missing this suggestion, it sounds better to me. :-)
I will rewrite this patch as you said.  Thanks a lot.

Thanks,
Xiao Yang.
> Thanks,
> Eryu
>
>>   fi
>>
>>   $here/src/seek_sanity_test -s 18 -e 18 $BASE_TEST_FILE>  $seqres.full 2>&1 ||
>> -- 
>> 1.8.3.1
>>
>>
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe fstests" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
> .
>




^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH] common/rc: factor out _ext4_disable_extent_zeroout() helper
  2017-07-21  7:07         ` Eryu Guan
@ 2017-07-24  9:49           ` Xiao Yang
  2017-07-24 10:04             ` Eryu Guan
  0 siblings, 1 reply; 12+ messages in thread
From: Xiao Yang @ 2017-07-24  9:49 UTC (permalink / raw)
  To: eguan; +Cc: fstests, Xiao Yang

1) This pattern is repeated in several seek_data/hole tests
   (e.g. generic/285, generic/436, generic/445 generic/448)
   and generic/009.  A common _ext4_disable_extent_zeroout()
   helper could be added and applied by generic/009 and
   _require_seek_data_hole().

2) On some old kernels(e.g. v3.1-v3.6), when vfs recognizes
   SEEK_DATA/HOLE flag && ext4 has no extent zeroout tunable
   in sysfs, these cases may trigger "sysfs entry not found"
   issue.  We can add check if extent_max_zeroout_kb exists
   on ext4 filesystem.
   The extent_max_zeroout_kb is introduced by:
   '67a5da564f97 ("ext4: make the zero-out chunk size tunable")'

3) Declare several vars as local in _require_seek_data_hole().

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 common/rc         | 29 ++++++++++++++++++++++-------
 tests/generic/009 |  7 +------
 tests/generic/285 |  6 ------
 tests/generic/436 |  6 ------
 tests/generic/445 |  6 ------
 tests/generic/448 |  6 ------
 6 files changed, 23 insertions(+), 37 deletions(-)

diff --git a/common/rc b/common/rc
index bd989bb..b36a9bf 100644
--- a/common/rc
+++ b/common/rc
@@ -2304,16 +2304,31 @@ _require_fail_make_request()
  not found. Seems that CONFIG_FAIL_MAKE_REQUEST kernel config option not enabled"
 }
 
-#
+# Disable extent zeroing for ext4 on the given device
+_ext4_disable_extent_zeroout()
+{
+	local dev=${1:-$TEST_DEV}
+	local sdev=`_short_dev $dev`
+
+	if [ "$FSTYP" == "ext4" ]; then
+		[ -f /sys/fs/ext4/$sdev/extent_max_zeroout_kb ] && \
+			echo 0 >/sys/fs/ext4/$sdev/extent_max_zeroout_kb
+	fi
+}
+
 # Check if the file system supports seek_data/hole
-#
 _require_seek_data_hole()
 {
-    testfile=$TEST_DIR/$$.seek
-    testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
-    rm -f $testfile &>/dev/null
-    echo $testseek | grep -q "Kernel does not support" && \
-        _notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
+	local dev=${1:-$TEST_DEV}
+	local testfile=$TEST_DIR/$$.seek
+	local testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
+
+	rm -f $testfile &>/dev/null
+	echo $testseek | grep -q "Kernel does not support" && \
+		_notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
+	# Disable extent zeroing for ext4 as that change where holes are
+	# created
+	_ext4_disable_extent_zeroout $dev
 }
 
 _require_runas()
diff --git a/tests/generic/009 b/tests/generic/009
index 5902afd..a7ca060 100755
--- a/tests/generic/009
+++ b/tests/generic/009
@@ -48,15 +48,10 @@ _require_xfs_io_command "fzero"
 _require_xfs_io_command "fiemap"
 _require_xfs_io_command "falloc"
 _require_test
+_ext4_disable_extent_zeroout
 
 testfile=$TEST_DIR/009.$$
 
-# Disable extent zeroing for ext4 as that change where holes are created
-if [ "$FSTYP" = "ext4" ]; then
-	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
-fi
-
 # When PAGE_SIZE > 4096 xfs extent layout is different so it would not match
 # the output.
 if [ "$FSTYP" = "xfs" ]; then
diff --git a/tests/generic/285 b/tests/generic/285
index 16e70b1..3f7d298 100755
--- a/tests/generic/285
+++ b/tests/generic/285
@@ -47,12 +47,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
 
 _require_test_program "seek_sanity_test"
 
-# Disable extent zeroing for ext4 as that change where holes are created
-if [ "$FSTYP" = "ext4" ]; then
-	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
-fi
-
 _cleanup()
 {
 	eval "rm -f $BASE_TEST_FILE.*"
diff --git a/tests/generic/436 b/tests/generic/436
index bcd6ddc..6cda008 100755
--- a/tests/generic/436
+++ b/tests/generic/436
@@ -44,12 +44,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
 
 _require_test_program "seek_sanity_test"
 
-# Disable extent zeroing for ext4 as that change where holes are created
-if [ "$FSTYP" = "ext4" ]; then
-	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
-fi
-
 _cleanup()
 {
 	rm -f $tmp.* $BASE_TEST_FILE.*
diff --git a/tests/generic/445 b/tests/generic/445
index 81dd916..323a0ca 100755
--- a/tests/generic/445
+++ b/tests/generic/445
@@ -44,12 +44,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
 
 _require_test_program "seek_sanity_test"
 
-# Disable extent zeroing for ext4 as that change where holes are created
-if [ "$FSTYP" = "ext4" ]; then
-	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
-fi
-
 _cleanup()
 {
 	rm -f $tmp.* $BASE_TEST_FILE.*
diff --git a/tests/generic/448 b/tests/generic/448
index 87b99d7..22656f6 100755
--- a/tests/generic/448
+++ b/tests/generic/448
@@ -48,12 +48,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile_$seq
 
 _require_test_program "seek_sanity_test"
 
-# Disable extent zeroing for ext4 as that change where holes are created
-if [ "$FSTYP" = "ext4" ]; then
-	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
-fi
-
 $here/src/seek_sanity_test -s 18 -e 18 $BASE_TEST_FILE > $seqres.full 2>&1 ||
 	_fail "seek sanity check failed!"
 
-- 
1.8.3.1




^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH] common/rc: factor out _ext4_disable_extent_zeroout() helper
  2017-07-24  9:49           ` [PATCH] common/rc: factor out _ext4_disable_extent_zeroout() helper Xiao Yang
@ 2017-07-24 10:04             ` Eryu Guan
  2017-07-24 10:33               ` Xiao Yang
  2017-07-24 10:44               ` [PATCH v2] " Xiao Yang
  0 siblings, 2 replies; 12+ messages in thread
From: Eryu Guan @ 2017-07-24 10:04 UTC (permalink / raw)
  To: Xiao Yang; +Cc: fstests

On Mon, Jul 24, 2017 at 05:49:07PM +0800, Xiao Yang wrote:
> 1) This pattern is repeated in several seek_data/hole tests
>    (e.g. generic/285, generic/436, generic/445 generic/448)
>    and generic/009.  A common _ext4_disable_extent_zeroout()
>    helper could be added and applied by generic/009 and
>    _require_seek_data_hole().
> 
> 2) On some old kernels(e.g. v3.1-v3.6), when vfs recognizes
>    SEEK_DATA/HOLE flag && ext4 has no extent zeroout tunable
>    in sysfs, these cases may trigger "sysfs entry not found"
>    issue.  We can add check if extent_max_zeroout_kb exists
>    on ext4 filesystem.
>    The extent_max_zeroout_kb is introduced by:
>    '67a5da564f97 ("ext4: make the zero-out chunk size tunable")'
> 
> 3) Declare several vars as local in _require_seek_data_hole().
> 
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>

Thanks for doing this!

> ---
>  common/rc         | 29 ++++++++++++++++++++++-------
>  tests/generic/009 |  7 +------
>  tests/generic/285 |  6 ------
>  tests/generic/436 |  6 ------
>  tests/generic/445 |  6 ------
>  tests/generic/448 |  6 ------
>  6 files changed, 23 insertions(+), 37 deletions(-)
> 
> diff --git a/common/rc b/common/rc
> index bd989bb..b36a9bf 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -2304,16 +2304,31 @@ _require_fail_make_request()
>   not found. Seems that CONFIG_FAIL_MAKE_REQUEST kernel config option not enabled"
>  }
>  
> -#
> +# Disable extent zeroing for ext4 on the given device
> +_ext4_disable_extent_zeroout()
> +{
> +	local dev=${1:-$TEST_DEV}
> +	local sdev=`_short_dev $dev`
> +
> +	if [ "$FSTYP" == "ext4" ]; then
> +		[ -f /sys/fs/ext4/$sdev/extent_max_zeroout_kb ] && \
> +			echo 0 >/sys/fs/ext4/$sdev/extent_max_zeroout_kb
> +	fi

I'd like the caller to do this FSTYP check if we name the function with
a leading _ext4, it seems redundant to check FSTYP again when we know it
only works for ext4.

Or we can make it a function serves all FSTYP using a case switch, and
ext4 is the only filesystem that needs action. But I'm not sure if it's
necessary for other filesystems at all, even in the future, so I
suggested _ext4_disable_extent_zeroout in the first place.

Thanks,
Eryu

> +}
> +
>  # Check if the file system supports seek_data/hole
> -#
>  _require_seek_data_hole()
>  {
> -    testfile=$TEST_DIR/$$.seek
> -    testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
> -    rm -f $testfile &>/dev/null
> -    echo $testseek | grep -q "Kernel does not support" && \
> -        _notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
> +	local dev=${1:-$TEST_DEV}
> +	local testfile=$TEST_DIR/$$.seek
> +	local testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
> +
> +	rm -f $testfile &>/dev/null
> +	echo $testseek | grep -q "Kernel does not support" && \
> +		_notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
> +	# Disable extent zeroing for ext4 as that change where holes are
> +	# created
> +	_ext4_disable_extent_zeroout $dev
>  }
>  
>  _require_runas()
> diff --git a/tests/generic/009 b/tests/generic/009
> index 5902afd..a7ca060 100755
> --- a/tests/generic/009
> +++ b/tests/generic/009
> @@ -48,15 +48,10 @@ _require_xfs_io_command "fzero"
>  _require_xfs_io_command "fiemap"
>  _require_xfs_io_command "falloc"
>  _require_test
> +_ext4_disable_extent_zeroout
>  
>  testfile=$TEST_DIR/009.$$
>  
> -# Disable extent zeroing for ext4 as that change where holes are created
> -if [ "$FSTYP" = "ext4" ]; then
> -	DEV=`_short_dev $TEST_DEV`
> -	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
> -fi
> -
>  # When PAGE_SIZE > 4096 xfs extent layout is different so it would not match
>  # the output.
>  if [ "$FSTYP" = "xfs" ]; then
> diff --git a/tests/generic/285 b/tests/generic/285
> index 16e70b1..3f7d298 100755
> --- a/tests/generic/285
> +++ b/tests/generic/285
> @@ -47,12 +47,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
>  
>  _require_test_program "seek_sanity_test"
>  
> -# Disable extent zeroing for ext4 as that change where holes are created
> -if [ "$FSTYP" = "ext4" ]; then
> -	DEV=`_short_dev $TEST_DEV`
> -	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
> -fi
> -
>  _cleanup()
>  {
>  	eval "rm -f $BASE_TEST_FILE.*"
> diff --git a/tests/generic/436 b/tests/generic/436
> index bcd6ddc..6cda008 100755
> --- a/tests/generic/436
> +++ b/tests/generic/436
> @@ -44,12 +44,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
>  
>  _require_test_program "seek_sanity_test"
>  
> -# Disable extent zeroing for ext4 as that change where holes are created
> -if [ "$FSTYP" = "ext4" ]; then
> -	DEV=`_short_dev $TEST_DEV`
> -	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
> -fi
> -
>  _cleanup()
>  {
>  	rm -f $tmp.* $BASE_TEST_FILE.*
> diff --git a/tests/generic/445 b/tests/generic/445
> index 81dd916..323a0ca 100755
> --- a/tests/generic/445
> +++ b/tests/generic/445
> @@ -44,12 +44,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
>  
>  _require_test_program "seek_sanity_test"
>  
> -# Disable extent zeroing for ext4 as that change where holes are created
> -if [ "$FSTYP" = "ext4" ]; then
> -	DEV=`_short_dev $TEST_DEV`
> -	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
> -fi
> -
>  _cleanup()
>  {
>  	rm -f $tmp.* $BASE_TEST_FILE.*
> diff --git a/tests/generic/448 b/tests/generic/448
> index 87b99d7..22656f6 100755
> --- a/tests/generic/448
> +++ b/tests/generic/448
> @@ -48,12 +48,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile_$seq
>  
>  _require_test_program "seek_sanity_test"
>  
> -# Disable extent zeroing for ext4 as that change where holes are created
> -if [ "$FSTYP" = "ext4" ]; then
> -	DEV=`_short_dev $TEST_DEV`
> -	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
> -fi
> -
>  $here/src/seek_sanity_test -s 18 -e 18 $BASE_TEST_FILE > $seqres.full 2>&1 ||
>  	_fail "seek sanity check failed!"
>  
> -- 
> 1.8.3.1
> 
> 
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] common/rc: factor out _ext4_disable_extent_zeroout() helper
  2017-07-24 10:04             ` Eryu Guan
@ 2017-07-24 10:33               ` Xiao Yang
  2017-07-24 10:44               ` [PATCH v2] " Xiao Yang
  1 sibling, 0 replies; 12+ messages in thread
From: Xiao Yang @ 2017-07-24 10:33 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests

On 2017/07/24 18:04, Eryu Guan wrote:
> On Mon, Jul 24, 2017 at 05:49:07PM +0800, Xiao Yang wrote:
>> 1) This pattern is repeated in several seek_data/hole tests
>>     (e.g. generic/285, generic/436, generic/445 generic/448)
>>     and generic/009.  A common _ext4_disable_extent_zeroout()
>>     helper could be added and applied by generic/009 and
>>     _require_seek_data_hole().
>>
>> 2) On some old kernels(e.g. v3.1-v3.6), when vfs recognizes
>>     SEEK_DATA/HOLE flag&&  ext4 has no extent zeroout tunable
>>     in sysfs, these cases may trigger "sysfs entry not found"
>>     issue.  We can add check if extent_max_zeroout_kb exists
>>     on ext4 filesystem.
>>     The extent_max_zeroout_kb is introduced by:
>>     '67a5da564f97 ("ext4: make the zero-out chunk size tunable")'
>>
>> 3) Declare several vars as local in _require_seek_data_hole().
>>
>> Signed-off-by: Xiao Yang<yangx.jy@cn.fujitsu.com>
> Thanks for doing this!
>
>> ---
>>   common/rc         | 29 ++++++++++++++++++++++-------
>>   tests/generic/009 |  7 +------
>>   tests/generic/285 |  6 ------
>>   tests/generic/436 |  6 ------
>>   tests/generic/445 |  6 ------
>>   tests/generic/448 |  6 ------
>>   6 files changed, 23 insertions(+), 37 deletions(-)
>>
>> diff --git a/common/rc b/common/rc
>> index bd989bb..b36a9bf 100644
>> --- a/common/rc
>> +++ b/common/rc
>> @@ -2304,16 +2304,31 @@ _require_fail_make_request()
>>    not found. Seems that CONFIG_FAIL_MAKE_REQUEST kernel config option not enabled"
>>   }
>>
>> -#
>> +# Disable extent zeroing for ext4 on the given device
>> +_ext4_disable_extent_zeroout()
>> +{
>> +	local dev=${1:-$TEST_DEV}
>> +	local sdev=`_short_dev $dev`
>> +
>> +	if [ "$FSTYP" == "ext4" ]; then
>> +		[ -f /sys/fs/ext4/$sdev/extent_max_zeroout_kb ]&&  \
>> +			echo 0>/sys/fs/ext4/$sdev/extent_max_zeroout_kb
>> +	fi
> I'd like the caller to do this FSTYP check if we name the function with
> a leading _ext4, it seems redundant to check FSTYP again when we know it
> only works for ext4.
Hi Eryu,

I prefer that only ext4 could call _ext4_disable_extent_zeroout.
I will send v2 patch as your above comment.  Thanks a lot.

Thanks,
Xiao Yang
> Or we can make it a function serves all FSTYP using a case switch, and
> ext4 is the only filesystem that needs action. But I'm not sure if it's
> necessary for other filesystems at all, even in the future, so I
> suggested _ext4_disable_extent_zeroout in the first place.
>
> Thanks,
> Eryu
>
>> +}
>> +
>>   # Check if the file system supports seek_data/hole
>> -#
>>   _require_seek_data_hole()
>>   {
>> -    testfile=$TEST_DIR/$$.seek
>> -    testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
>> -    rm -f $testfile&>/dev/null
>> -    echo $testseek | grep -q "Kernel does not support"&&  \
>> -        _notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
>> +	local dev=${1:-$TEST_DEV}
>> +	local testfile=$TEST_DIR/$$.seek
>> +	local testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
>> +
>> +	rm -f $testfile&>/dev/null
>> +	echo $testseek | grep -q "Kernel does not support"&&  \
>> +		_notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
>> +	# Disable extent zeroing for ext4 as that change where holes are
>> +	# created
>> +	_ext4_disable_extent_zeroout $dev
>>   }
>>
>>   _require_runas()
>> diff --git a/tests/generic/009 b/tests/generic/009
>> index 5902afd..a7ca060 100755
>> --- a/tests/generic/009
>> +++ b/tests/generic/009
>> @@ -48,15 +48,10 @@ _require_xfs_io_command "fzero"
>>   _require_xfs_io_command "fiemap"
>>   _require_xfs_io_command "falloc"
>>   _require_test
>> +_ext4_disable_extent_zeroout
>>
>>   testfile=$TEST_DIR/009.$$
>>
>> -# Disable extent zeroing for ext4 as that change where holes are created
>> -if [ "$FSTYP" = "ext4" ]; then
>> -	DEV=`_short_dev $TEST_DEV`
>> -	echo 0>/sys/fs/ext4/$DEV/extent_max_zeroout_kb
>> -fi
>> -
>>   # When PAGE_SIZE>  4096 xfs extent layout is different so it would not match
>>   # the output.
>>   if [ "$FSTYP" = "xfs" ]; then
>> diff --git a/tests/generic/285 b/tests/generic/285
>> index 16e70b1..3f7d298 100755
>> --- a/tests/generic/285
>> +++ b/tests/generic/285
>> @@ -47,12 +47,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
>>
>>   _require_test_program "seek_sanity_test"
>>
>> -# Disable extent zeroing for ext4 as that change where holes are created
>> -if [ "$FSTYP" = "ext4" ]; then
>> -	DEV=`_short_dev $TEST_DEV`
>> -	echo 0>/sys/fs/ext4/$DEV/extent_max_zeroout_kb
>> -fi
>> -
>>   _cleanup()
>>   {
>>   	eval "rm -f $BASE_TEST_FILE.*"
>> diff --git a/tests/generic/436 b/tests/generic/436
>> index bcd6ddc..6cda008 100755
>> --- a/tests/generic/436
>> +++ b/tests/generic/436
>> @@ -44,12 +44,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
>>
>>   _require_test_program "seek_sanity_test"
>>
>> -# Disable extent zeroing for ext4 as that change where holes are created
>> -if [ "$FSTYP" = "ext4" ]; then
>> -	DEV=`_short_dev $TEST_DEV`
>> -	echo 0>/sys/fs/ext4/$DEV/extent_max_zeroout_kb
>> -fi
>> -
>>   _cleanup()
>>   {
>>   	rm -f $tmp.* $BASE_TEST_FILE.*
>> diff --git a/tests/generic/445 b/tests/generic/445
>> index 81dd916..323a0ca 100755
>> --- a/tests/generic/445
>> +++ b/tests/generic/445
>> @@ -44,12 +44,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
>>
>>   _require_test_program "seek_sanity_test"
>>
>> -# Disable extent zeroing for ext4 as that change where holes are created
>> -if [ "$FSTYP" = "ext4" ]; then
>> -	DEV=`_short_dev $TEST_DEV`
>> -	echo 0>/sys/fs/ext4/$DEV/extent_max_zeroout_kb
>> -fi
>> -
>>   _cleanup()
>>   {
>>   	rm -f $tmp.* $BASE_TEST_FILE.*
>> diff --git a/tests/generic/448 b/tests/generic/448
>> index 87b99d7..22656f6 100755
>> --- a/tests/generic/448
>> +++ b/tests/generic/448
>> @@ -48,12 +48,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile_$seq
>>
>>   _require_test_program "seek_sanity_test"
>>
>> -# Disable extent zeroing for ext4 as that change where holes are created
>> -if [ "$FSTYP" = "ext4" ]; then
>> -	DEV=`_short_dev $TEST_DEV`
>> -	echo 0>/sys/fs/ext4/$DEV/extent_max_zeroout_kb
>> -fi
>> -
>>   $here/src/seek_sanity_test -s 18 -e 18 $BASE_TEST_FILE>  $seqres.full 2>&1 ||
>>   	_fail "seek sanity check failed!"
>>
>> -- 
>> 1.8.3.1
>>
>>
>>
>
> .
>




^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2] common/rc: factor out _ext4_disable_extent_zeroout() helper
  2017-07-24 10:04             ` Eryu Guan
  2017-07-24 10:33               ` Xiao Yang
@ 2017-07-24 10:44               ` Xiao Yang
  1 sibling, 0 replies; 12+ messages in thread
From: Xiao Yang @ 2017-07-24 10:44 UTC (permalink / raw)
  To: eguan; +Cc: fstests, Xiao Yang

1) This pattern is repeated in several seek_data/hole tests
   (e.g. generic/285, generic/436, generic/445 generic/448)
   and generic/009.  A common _ext4_disable_extent_zeroout()
   helper could be added and applied by generic/009 and
   _require_seek_data_hole().

2) On some old kernels(e.g. v3.1-v3.6), when vfs recognizes
   SEEK_DATA/HOLE flag && ext4 has no extent zeroout tunable
   in sysfs, these cases may trigger "sysfs entry not found"
   issue.  We can add check if extent_max_zeroout_kb exists
   on ext4 filesystem.
   The extent_max_zeroout_kb is introduced by:
   '67a5da564f97 ("ext4: make the zero-out chunk size tunable")'

3) Declare several vars as local in _require_seek_data_hole().

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 common/rc         | 29 ++++++++++++++++++++++-------
 tests/generic/009 |  3 +--
 tests/generic/285 |  6 ------
 tests/generic/436 |  6 ------
 tests/generic/445 |  6 ------
 tests/generic/448 |  6 ------
 6 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/common/rc b/common/rc
index bd989bb..49887cf 100644
--- a/common/rc
+++ b/common/rc
@@ -2304,16 +2304,31 @@ _require_fail_make_request()
  not found. Seems that CONFIG_FAIL_MAKE_REQUEST kernel config option not enabled"
 }
 
-#
+# Disable extent zeroing for ext4 on the given device
+_ext4_disable_extent_zeroout()
+{
+	local dev=${1:-$TEST_DEV}
+	local sdev=`_short_dev $dev`
+
+	[ -f /sys/fs/ext4/$sdev/extent_max_zeroout_kb ] && \
+		echo 0 >/sys/fs/ext4/$sdev/extent_max_zeroout_kb
+}
+
 # Check if the file system supports seek_data/hole
-#
 _require_seek_data_hole()
 {
-    testfile=$TEST_DIR/$$.seek
-    testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
-    rm -f $testfile &>/dev/null
-    echo $testseek | grep -q "Kernel does not support" && \
-        _notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
+	local dev=${1:-$TEST_DEV}
+	local testfile=$TEST_DIR/$$.seek
+	local testseek=`$here/src/seek_sanity_test -t $testfile 2>&1`
+
+	rm -f $testfile &>/dev/null
+	echo $testseek | grep -q "Kernel does not support" && \
+		_notrun "File system does not support llseek(2) SEEK_DATA/HOLE"
+	# Disable extent zeroing for ext4 as that change where holes are
+	# created
+	if [ "$FSTYP" = "ext4" ]; then
+		_ext4_disable_extent_zeroout $dev
+	fi
 }
 
 _require_runas()
diff --git a/tests/generic/009 b/tests/generic/009
index 5902afd..797def5 100755
--- a/tests/generic/009
+++ b/tests/generic/009
@@ -53,8 +53,7 @@ testfile=$TEST_DIR/009.$$
 
 # Disable extent zeroing for ext4 as that change where holes are created
 if [ "$FSTYP" = "ext4" ]; then
-	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
+	_ext4_disable_extent_zeroout
 fi
 
 # When PAGE_SIZE > 4096 xfs extent layout is different so it would not match
diff --git a/tests/generic/285 b/tests/generic/285
index 16e70b1..3f7d298 100755
--- a/tests/generic/285
+++ b/tests/generic/285
@@ -47,12 +47,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
 
 _require_test_program "seek_sanity_test"
 
-# Disable extent zeroing for ext4 as that change where holes are created
-if [ "$FSTYP" = "ext4" ]; then
-	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
-fi
-
 _cleanup()
 {
 	eval "rm -f $BASE_TEST_FILE.*"
diff --git a/tests/generic/436 b/tests/generic/436
index bcd6ddc..6cda008 100755
--- a/tests/generic/436
+++ b/tests/generic/436
@@ -44,12 +44,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
 
 _require_test_program "seek_sanity_test"
 
-# Disable extent zeroing for ext4 as that change where holes are created
-if [ "$FSTYP" = "ext4" ]; then
-	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
-fi
-
 _cleanup()
 {
 	rm -f $tmp.* $BASE_TEST_FILE.*
diff --git a/tests/generic/445 b/tests/generic/445
index 81dd916..323a0ca 100755
--- a/tests/generic/445
+++ b/tests/generic/445
@@ -44,12 +44,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
 
 _require_test_program "seek_sanity_test"
 
-# Disable extent zeroing for ext4 as that change where holes are created
-if [ "$FSTYP" = "ext4" ]; then
-	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
-fi
-
 _cleanup()
 {
 	rm -f $tmp.* $BASE_TEST_FILE.*
diff --git a/tests/generic/448 b/tests/generic/448
index 87b99d7..22656f6 100755
--- a/tests/generic/448
+++ b/tests/generic/448
@@ -48,12 +48,6 @@ BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile_$seq
 
 _require_test_program "seek_sanity_test"
 
-# Disable extent zeroing for ext4 as that change where holes are created
-if [ "$FSTYP" = "ext4" ]; then
-	DEV=`_short_dev $TEST_DEV`
-	echo 0 >/sys/fs/ext4/$DEV/extent_max_zeroout_kb
-fi
-
 $here/src/seek_sanity_test -s 18 -e 18 $BASE_TEST_FILE > $seqres.full 2>&1 ||
 	_fail "seek sanity check failed!"
 
-- 
1.8.3.1




^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2017-07-24 10:44 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-18  8:27 [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported Xiao Yang
2017-07-18 13:18 ` Eryu Guan
2017-07-19  2:35   ` Xiao Yang
2017-07-19  9:56     ` Eryu Guan
2017-07-19 10:38       ` Xiao Yang
2017-07-21  7:07         ` Eryu Guan
2017-07-24  9:49           ` [PATCH] common/rc: factor out _ext4_disable_extent_zeroout() helper Xiao Yang
2017-07-24 10:04             ` Eryu Guan
2017-07-24 10:33               ` Xiao Yang
2017-07-24 10:44               ` [PATCH v2] " Xiao Yang
2017-07-19  3:06   ` [PATCH] common/rc: update _require_seek_data_hole() Xiao Yang
2017-07-24  7:13   ` [PATCH] generic/448: don't disable extent zeroing if extent_max_zeroout_kb isn't supported Xiao Yang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox