All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ext4: regression test for hang when processing corrupted orphaned inode list
@ 2016-06-13  9:09 Guangwen Feng
  2016-06-13  9:33 ` Eryu Guan
  0 siblings, 1 reply; 11+ messages in thread
From: Guangwen Feng @ 2016-06-13  9:09 UTC (permalink / raw)
  To: fstests; +Cc: Guangwen Feng

Commit c9eb13a fixed this bug:
	ext4: fix hang when processing corrupted orphaned inode list

Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
---
 tests/ext4/022     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/ext4/022.out |  1 +
 tests/ext4/group   |  1 +
 3 files changed, 57 insertions(+)
 create mode 100755 tests/ext4/022
 create mode 100644 tests/ext4/022.out

diff --git a/tests/ext4/022 b/tests/ext4/022
new file mode 100755
index 0000000..a3cc094
--- /dev/null
+++ b/tests/ext4/022
@@ -0,0 +1,55 @@
+#! /bin/bash
+# FS QA Test 022
+#
+# Regression test for commit:
+# c9eb13a ext4: fix hang when processing corrupted orphaned inode list
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2016 Fujitsu.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#-----------------------------------------------------------------------
+#
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+    cd /
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# real QA test starts here
+_supported_fs ext4
+_supported_os Linux
+_require_scratch
+_require_debugfs
+
+_scratch_mkfs >>$seqres.full 2>&1
+debugfs -w -R "ssv last_orphan 5" $SCRATCH_DEV >>$seqres.full 2>&1
+_scratch_mount
+
+# success, all done
+status=0
+exit
diff --git a/tests/ext4/022.out b/tests/ext4/022.out
new file mode 100644
index 0000000..0266a8a
--- /dev/null
+++ b/tests/ext4/022.out
@@ -0,0 +1 @@
+QA output created by 022
diff --git a/tests/ext4/group b/tests/ext4/group
index 9e28159..3e0146b 100644
--- a/tests/ext4/group
+++ b/tests/ext4/group
@@ -23,6 +23,7 @@
 018 fuzzers
 019 fuzzers
 020 auto quick ioctl rw
+022 auto quick
 271 auto rw quick
 301 aio auto ioctl rw stress
 302 aio auto ioctl rw stress
-- 
1.8.4.2




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

* Re: [PATCH] ext4: regression test for hang when processing corrupted orphaned inode list
  2016-06-13  9:09 [PATCH] ext4: regression test for hang when processing corrupted orphaned inode list Guangwen Feng
@ 2016-06-13  9:33 ` Eryu Guan
  2016-06-13 10:15   ` Guangwen Feng
  2016-06-14  2:58   ` [PATCH v2] shared: " Guangwen Feng
  0 siblings, 2 replies; 11+ messages in thread
From: Eryu Guan @ 2016-06-13  9:33 UTC (permalink / raw)
  To: Guangwen Feng; +Cc: fstests

On Mon, Jun 13, 2016 at 05:09:12PM +0800, Guangwen Feng wrote:
> Commit c9eb13a fixed this bug:
> 	ext4: fix hang when processing corrupted orphaned inode list
> 
> Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
> ---
>  tests/ext4/022     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/ext4/022.out |  1 +
>  tests/ext4/group   |  1 +
>  3 files changed, 57 insertions(+)
>  create mode 100755 tests/ext4/022
>  create mode 100644 tests/ext4/022.out
> 
> diff --git a/tests/ext4/022 b/tests/ext4/022
> new file mode 100755
> index 0000000..a3cc094
> --- /dev/null
> +++ b/tests/ext4/022
> @@ -0,0 +1,55 @@
> +#! /bin/bash
> +# FS QA Test 022
> +#
> +# Regression test for commit:
> +# c9eb13a ext4: fix hang when processing corrupted orphaned inode list
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (c) 2016 Fujitsu.  All Rights Reserved.
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License as
> +# published by the Free Software Foundation.
> +#
> +# This program is distributed in the hope that it would be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write the Free Software Foundation,
> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> +#-----------------------------------------------------------------------
> +#
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +status=1	# failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +    cd /

Please use tab not space for indention.

And I think we need "rm -f $tmp.*" in _cleanup() even if you don't take
use any $tmp.* files, because helper functions may use the tmp files
internally, we should remove them as well.

> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +# real QA test starts here
> +_supported_fs ext4

It could support ext2/ext3 as well, and move the test to shared
directory, as what shared/001 does.

> +_supported_os Linux
> +_require_scratch
> +_require_debugfs

This requires debugfs pseudo filesystem, not debugfs binary. Use
_require_command "$DEBUGFS_PROG" debugfs

But you may want to define $DEBUGFS_PROG first in common/config.

> +
> +_scratch_mkfs >>$seqres.full 2>&1
> +debugfs -w -R "ssv last_orphan 5" $SCRATCH_DEV >>$seqres.full 2>&1

Though the bug only happens when last_orphan is set to 5, I think we can
test all reserved inode numbers, 1-10, 11 is the first non-reserved
inode.

> +_scratch_mount
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/ext4/022.out b/tests/ext4/022.out
> new file mode 100644
> index 0000000..0266a8a
> --- /dev/null
> +++ b/tests/ext4/022.out
> @@ -0,0 +1 @@
> +QA output created by 022

You need a "Silence is golden" in golden image to indicate that this
test doesn't expect any output.

> diff --git a/tests/ext4/group b/tests/ext4/group
> index 9e28159..3e0146b 100644
> --- a/tests/ext4/group
> +++ b/tests/ext4/group
> @@ -23,6 +23,7 @@
>  018 fuzzers
>  019 fuzzers
>  020 auto quick ioctl rw
> +022 auto quick

If you're not using big seq number on purpose, pick the smallest
available sequence number, that's 021 in this case.

Thanks,
Eryu

>  271 auto rw quick
>  301 aio auto ioctl rw stress
>  302 aio auto ioctl rw stress
> -- 
> 1.8.4.2
> 
> 
> 
> --
> 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] 11+ messages in thread

* Re: [PATCH] ext4: regression test for hang when processing corrupted orphaned inode list
  2016-06-13  9:33 ` Eryu Guan
@ 2016-06-13 10:15   ` Guangwen Feng
  2016-06-14  2:31     ` Guangwen Feng
  2016-06-14  2:58   ` [PATCH v2] shared: " Guangwen Feng
  1 sibling, 1 reply; 11+ messages in thread
From: Guangwen Feng @ 2016-06-13 10:15 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests

Hi!

Thanks for your review and kindly reply.
I will rewrite the patch according to your suggestion.

On 06/13/2016 05:33 PM, Eryu Guan wrote:
> On Mon, Jun 13, 2016 at 05:09:12PM +0800, Guangwen Feng wrote:
>> Commit c9eb13a fixed this bug:
>> 	ext4: fix hang when processing corrupted orphaned inode list
>>
>> Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
>> ---
>>  tests/ext4/022     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>  tests/ext4/022.out |  1 +
>>  tests/ext4/group   |  1 +
>>  3 files changed, 57 insertions(+)
>>  create mode 100755 tests/ext4/022
>>  create mode 100644 tests/ext4/022.out
>>
>> diff --git a/tests/ext4/022 b/tests/ext4/022
>> new file mode 100755
>> index 0000000..a3cc094
>> --- /dev/null
>> +++ b/tests/ext4/022
>> @@ -0,0 +1,55 @@
>> +#! /bin/bash
>> +# FS QA Test 022
>> +#
>> +# Regression test for commit:
>> +# c9eb13a ext4: fix hang when processing corrupted orphaned inode list
>> +#
>> +#-----------------------------------------------------------------------
>> +# Copyright (c) 2016 Fujitsu.  All Rights Reserved.
>> +#
>> +# This program is free software; you can redistribute it and/or
>> +# modify it under the terms of the GNU General Public License as
>> +# published by the Free Software Foundation.
>> +#
>> +# This program is distributed in the hope that it would be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program; if not, write the Free Software Foundation,
>> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
>> +#-----------------------------------------------------------------------
>> +#
>> +
>> +seq=`basename $0`
>> +seqres=$RESULT_DIR/$seq
>> +echo "QA output created by $seq"
>> +
>> +status=1	# failure is the default!
>> +trap "_cleanup; exit \$status" 0 1 2 3 15
>> +
>> +_cleanup()
>> +{
>> +    cd /
> 
> Please use tab not space for indention.
> 
> And I think we need "rm -f $tmp.*" in _cleanup() even if you don't take
> use any $tmp.* files, because helper functions may use the tmp files
> internally, we should remove them as well.
> 
>> +}
>> +
>> +# get standard environment, filters and checks
>> +. ./common/rc
>> +
>> +# remove previous $seqres.full before test
>> +rm -f $seqres.full
>> +
>> +# real QA test starts here
>> +_supported_fs ext4
> 
> It could support ext2/ext3 as well, and move the test to shared
> directory, as what shared/001 does.
> 
>> +_supported_os Linux
>> +_require_scratch
>> +_require_debugfs
> 
> This requires debugfs pseudo filesystem, not debugfs binary. Use
> _require_command "$DEBUGFS_PROG" debugfs
> 
> But you may want to define $DEBUGFS_PROG first in common/config.
> 
>> +
>> +_scratch_mkfs >>$seqres.full 2>&1
>> +debugfs -w -R "ssv last_orphan 5" $SCRATCH_DEV >>$seqres.full 2>&1
> 
> Though the bug only happens when last_orphan is set to 5, I think we can
> test all reserved inode numbers, 1-10, 11 is the first non-reserved
> inode.
> 
>> +_scratch_mount
>> +
>> +# success, all done
>> +status=0
>> +exit
>> diff --git a/tests/ext4/022.out b/tests/ext4/022.out
>> new file mode 100644
>> index 0000000..0266a8a
>> --- /dev/null
>> +++ b/tests/ext4/022.out
>> @@ -0,0 +1 @@
>> +QA output created by 022
> 
> You need a "Silence is golden" in golden image to indicate that this
> test doesn't expect any output.
> 
>> diff --git a/tests/ext4/group b/tests/ext4/group
>> index 9e28159..3e0146b 100644
>> --- a/tests/ext4/group
>> +++ b/tests/ext4/group
>> @@ -23,6 +23,7 @@
>>  018 fuzzers
>>  019 fuzzers
>>  020 auto quick ioctl rw
>> +022 auto quick
> 
> If you're not using big seq number on purpose, pick the smallest
> available sequence number, that's 021 in this case.

I see there is a 021 in the mailing list:
fstests: ext4: regression test for fsync transaction ids initialization

Anyway, I will change it to the smallest available sequence number for now.

Best Regards,
Guangwen Feng

> 
> Thanks,
> Eryu
> 
>>  271 auto rw quick
>>  301 aio auto ioctl rw stress
>>  302 aio auto ioctl rw stress
>> -- 
>> 1.8.4.2
>>
>>
>>
>> --
>> 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] 11+ messages in thread

* Re: [PATCH] ext4: regression test for hang when processing corrupted orphaned inode list
  2016-06-13 10:15   ` Guangwen Feng
@ 2016-06-14  2:31     ` Guangwen Feng
  0 siblings, 0 replies; 11+ messages in thread
From: Guangwen Feng @ 2016-06-14  2:31 UTC (permalink / raw)
  To: fstests; +Cc: fenggw-fnst@cn.fujitsu.com >> Guangwen Feng

Hi, Eryu.
Sorry, I received email failure notification that it was undeliverable to your address.
So I resend it to the mailing list.

On 06/13/2016 06:15 PM, Guangwen Feng wrote:
> Hi!
> 
> Thanks for your review and kindly reply.
> I will rewrite the patch according to your suggestion.
> 
> On 06/13/2016 05:33 PM, Eryu Guan wrote:
>> On Mon, Jun 13, 2016 at 05:09:12PM +0800, Guangwen Feng wrote:
>>> Commit c9eb13a fixed this bug:
>>> 	ext4: fix hang when processing corrupted orphaned inode list
>>>
>>> Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
>>> ---
>>>  tests/ext4/022     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>  tests/ext4/022.out |  1 +
>>>  tests/ext4/group   |  1 +
>>>  3 files changed, 57 insertions(+)
>>>  create mode 100755 tests/ext4/022
>>>  create mode 100644 tests/ext4/022.out
>>>
>>> diff --git a/tests/ext4/022 b/tests/ext4/022
>>> new file mode 100755
>>> index 0000000..a3cc094
>>> --- /dev/null
>>> +++ b/tests/ext4/022
>>> @@ -0,0 +1,55 @@
>>> +#! /bin/bash
>>> +# FS QA Test 022
>>> +#
>>> +# Regression test for commit:
>>> +# c9eb13a ext4: fix hang when processing corrupted orphaned inode list
>>> +#
>>> +#-----------------------------------------------------------------------
>>> +# Copyright (c) 2016 Fujitsu.  All Rights Reserved.
>>> +#
>>> +# This program is free software; you can redistribute it and/or
>>> +# modify it under the terms of the GNU General Public License as
>>> +# published by the Free Software Foundation.
>>> +#
>>> +# This program is distributed in the hope that it would be useful,
>>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> +# GNU General Public License for more details.
>>> +#
>>> +# You should have received a copy of the GNU General Public License
>>> +# along with this program; if not, write the Free Software Foundation,
>>> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
>>> +#-----------------------------------------------------------------------
>>> +#
>>> +
>>> +seq=`basename $0`
>>> +seqres=$RESULT_DIR/$seq
>>> +echo "QA output created by $seq"
>>> +
>>> +status=1	# failure is the default!
>>> +trap "_cleanup; exit \$status" 0 1 2 3 15
>>> +
>>> +_cleanup()
>>> +{
>>> +    cd /
>>
>> Please use tab not space for indention.
>>
>> And I think we need "rm -f $tmp.*" in _cleanup() even if you don't take
>> use any $tmp.* files, because helper functions may use the tmp files
>> internally, we should remove them as well.
>>
>>> +}
>>> +
>>> +# get standard environment, filters and checks
>>> +. ./common/rc
>>> +
>>> +# remove previous $seqres.full before test
>>> +rm -f $seqres.full
>>> +
>>> +# real QA test starts here
>>> +_supported_fs ext4
>>
>> It could support ext2/ext3 as well, and move the test to shared
>> directory, as what shared/001 does.
>>
>>> +_supported_os Linux
>>> +_require_scratch
>>> +_require_debugfs
>>
>> This requires debugfs pseudo filesystem, not debugfs binary. Use
>> _require_command "$DEBUGFS_PROG" debugfs
>>
>> But you may want to define $DEBUGFS_PROG first in common/config.
>>
>>> +
>>> +_scratch_mkfs >>$seqres.full 2>&1
>>> +debugfs -w -R "ssv last_orphan 5" $SCRATCH_DEV >>$seqres.full 2>&1
>>
>> Though the bug only happens when last_orphan is set to 5, I think we can
>> test all reserved inode numbers, 1-10, 11 is the first non-reserved
>> inode.
>>
>>> +_scratch_mount
>>> +
>>> +# success, all done
>>> +status=0
>>> +exit
>>> diff --git a/tests/ext4/022.out b/tests/ext4/022.out
>>> new file mode 100644
>>> index 0000000..0266a8a
>>> --- /dev/null
>>> +++ b/tests/ext4/022.out
>>> @@ -0,0 +1 @@
>>> +QA output created by 022
>>
>> You need a "Silence is golden" in golden image to indicate that this
>> test doesn't expect any output.
>>
>>> diff --git a/tests/ext4/group b/tests/ext4/group
>>> index 9e28159..3e0146b 100644
>>> --- a/tests/ext4/group
>>> +++ b/tests/ext4/group
>>> @@ -23,6 +23,7 @@
>>>  018 fuzzers
>>>  019 fuzzers
>>>  020 auto quick ioctl rw
>>> +022 auto quick
>>
>> If you're not using big seq number on purpose, pick the smallest
>> available sequence number, that's 021 in this case.
> 
> I see there is a 021 in the mailing list:
> fstests: ext4: regression test for fsync transaction ids initialization
> 
> Anyway, I will change it to the smallest available sequence number for now.
> 
> Best Regards,
> Guangwen Feng
> 
>>
>> Thanks,
>> Eryu
>>
>>>  271 auto rw quick
>>>  301 aio auto ioctl rw stress
>>>  302 aio auto ioctl rw stress
>>> -- 
>>> 1.8.4.2
>>>
>>>
>>>
>>> --
>>> 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
>>
>>
>> .
>>
> 
> 
> --
> 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] 11+ messages in thread

* [PATCH v2] shared: regression test for hang when processing corrupted orphaned inode list
  2016-06-13  9:33 ` Eryu Guan
  2016-06-13 10:15   ` Guangwen Feng
@ 2016-06-14  2:58   ` Guangwen Feng
  2016-06-14  4:39     ` Eryu Guan
  1 sibling, 1 reply; 11+ messages in thread
From: Guangwen Feng @ 2016-06-14  2:58 UTC (permalink / raw)
  To: fstests; +Cc: Guangwen Feng

Commit c9eb13a fixed this bug:
	ext4: fix hang when processing corrupted orphaned inode list

Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
---
 common/config        |  1 +
 tests/shared/004     | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/shared/004.out |  2 ++
 tests/shared/group   |  1 +
 4 files changed, 66 insertions(+)
 create mode 100755 tests/shared/004
 create mode 100644 tests/shared/004.out

diff --git a/common/config b/common/config
index cacd815..c25b1ec 100644
--- a/common/config
+++ b/common/config
@@ -195,6 +195,7 @@ export DUMP_PROG="`set_prog_path dump`"
 export RESTORE_PROG="`set_prog_path restore`"
 export LVM_PROG="`set_prog_path lvm`"
 export CHATTR_PROG="`set_prog_path chattr`"
+export DEBUGFS_PROG="`set_prog_path debugfs`"
 
 # use 'udevadm settle' or 'udevsettle' to wait for lv to be settled.
 # newer systems have udevadm command but older systems like RHEL5 don't.
diff --git a/tests/shared/004 b/tests/shared/004
new file mode 100755
index 0000000..213fba2
--- /dev/null
+++ b/tests/shared/004
@@ -0,0 +1,62 @@
+#! /bin/bash
+# FS QA Test 004
+#
+# Regression test for commit:
+# c9eb13a ext4: fix hang when processing corrupted orphaned inode list
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2016 Fujitsu.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#-----------------------------------------------------------------------
+#
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+tmp=/tmp/$$
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+
+# real QA test starts here
+_supported_fs ext2 ext3 ext4
+_supported_os Linux
+_require_scratch
+_require_command "$DEBUGFS_PROG" debugfs
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+echo "Silence is golden"
+
+for i in {1..10}
+do
+	_scratch_mkfs >>$seqres.full 2>&1
+	debugfs -w -R "ssv last_orphan $i" $SCRATCH_DEV >>$seqres.full 2>&1
+	_scratch_mount
+	_scratch_unmount
+done
+
+# success, all done
+status=0
+exit
diff --git a/tests/shared/004.out b/tests/shared/004.out
new file mode 100644
index 0000000..af8614a
--- /dev/null
+++ b/tests/shared/004.out
@@ -0,0 +1,2 @@
+QA output created by 004
+Silence is golden
diff --git a/tests/shared/group b/tests/shared/group
index ba8a3f0..55bb594 100644
--- a/tests/shared/group
+++ b/tests/shared/group
@@ -6,6 +6,7 @@
 001 auto quick
 002 auto metadata quick
 003 auto quick
+004 auto quick
 006 auto enospc
 032 mkfs auto quick
 051 acl udf auto quick
-- 
1.8.4.2




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

* Re: [PATCH v2] shared: regression test for hang when processing corrupted orphaned inode list
  2016-06-14  2:58   ` [PATCH v2] shared: " Guangwen Feng
@ 2016-06-14  4:39     ` Eryu Guan
  2016-06-15  3:35       ` Eryu Guan
  2016-06-15  5:21       ` [PATCH v3] " Guangwen Feng
  0 siblings, 2 replies; 11+ messages in thread
From: Eryu Guan @ 2016-06-14  4:39 UTC (permalink / raw)
  To: Guangwen Feng; +Cc: fstests

On Tue, Jun 14, 2016 at 10:58:59AM +0800, Guangwen Feng wrote:
> Commit c9eb13a fixed this bug:
> 	ext4: fix hang when processing corrupted orphaned inode list
> 
> Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>

Looks good to me overall. Some minor issues inline below

> ---
>  common/config        |  1 +
>  tests/shared/004     | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/shared/004.out |  2 ++
>  tests/shared/group   |  1 +
>  4 files changed, 66 insertions(+)
>  create mode 100755 tests/shared/004
>  create mode 100644 tests/shared/004.out
> 
> diff --git a/common/config b/common/config
> index cacd815..c25b1ec 100644
> --- a/common/config
> +++ b/common/config
> @@ -195,6 +195,7 @@ export DUMP_PROG="`set_prog_path dump`"
>  export RESTORE_PROG="`set_prog_path restore`"
>  export LVM_PROG="`set_prog_path lvm`"
>  export CHATTR_PROG="`set_prog_path chattr`"
> +export DEBUGFS_PROG="`set_prog_path debugfs`"
>  
>  # use 'udevadm settle' or 'udevsettle' to wait for lv to be settled.
>  # newer systems have udevadm command but older systems like RHEL5 don't.
> diff --git a/tests/shared/004 b/tests/shared/004
> new file mode 100755
> index 0000000..213fba2
> --- /dev/null
> +++ b/tests/shared/004
> @@ -0,0 +1,62 @@
> +#! /bin/bash
> +# FS QA Test 004
> +#
> +# Regression test for commit:
> +# c9eb13a ext4: fix hang when processing corrupted orphaned inode list
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (c) 2016 Fujitsu.  All Rights Reserved.
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License as
> +# published by the Free Software Foundation.
> +#
> +# This program is distributed in the hope that it would be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write the Free Software Foundation,
> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> +#-----------------------------------------------------------------------
> +#
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +tmp=/tmp/$$
> +status=1	# failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +
> +# real QA test starts here
> +_supported_fs ext2 ext3 ext4
> +_supported_os Linux
> +_require_scratch
> +_require_command "$DEBUGFS_PROG" debugfs
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +echo "Silence is golden"
> +
> +for i in {1..10}
> +do

Good to have some comments to explain why inode 1-10 are tested.

And fstests perfers the following for loop:
	for ...; do
		do something
	done

> +	_scratch_mkfs >>$seqres.full 2>&1

Use _scratch_mkfs_sized to create smaller filesystems? So we don't spend
much time creating filesystems. This reduces test time from 57s to 2s
for me when testing with 1k block size ext2/3. e.g.

	# create smaller filesystems to save test time
	_scratch_mkfs_sized $((16 * 1024 * 1024)) >>$seqres.full 2>&1

> +	debugfs -w -R "ssv last_orphan $i" $SCRATCH_DEV >>$seqres.full 2>&1

You defined $DEBUGFS_PROG, use it here :)

> +	_scratch_mount
> +	_scratch_unmount

There's a new helper to do this now, _scratch_cycle_mount

Thanks,
Eryu

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

* Re: [PATCH v2] shared: regression test for hang when processing corrupted orphaned inode list
  2016-06-14  4:39     ` Eryu Guan
@ 2016-06-15  3:35       ` Eryu Guan
  2016-06-15  3:43         ` Guangwen Feng
  2016-06-15  5:21       ` [PATCH v3] " Guangwen Feng
  1 sibling, 1 reply; 11+ messages in thread
From: Eryu Guan @ 2016-06-15  3:35 UTC (permalink / raw)
  To: Guangwen Feng; +Cc: fstests

On Tue, Jun 14, 2016 at 12:39:42PM +0800, Eryu Guan wrote:
> On Tue, Jun 14, 2016 at 10:58:59AM +0800, Guangwen Feng wrote:
> > Commit c9eb13a fixed this bug:
> > 	ext4: fix hang when processing corrupted orphaned inode list
> > 
> > Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
> 
> Looks good to me overall. Some minor issues inline below
> 
[snip]
> 
> > +	debugfs -w -R "ssv last_orphan $i" $SCRATCH_DEV >>$seqres.full 2>&1
> 
> You defined $DEBUGFS_PROG, use it here :)
> 
> > +	_scratch_mount
> > +	_scratch_unmount
> 
> There's a new helper to do this now, _scratch_cycle_mount

Sorry, the helper doesn't help here, it umount first then mount.  You're
doing mount then umount.

Thanks,
Eryu

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

* Re: [PATCH v2] shared: regression test for hang when processing corrupted orphaned inode list
  2016-06-15  3:35       ` Eryu Guan
@ 2016-06-15  3:43         ` Guangwen Feng
  0 siblings, 0 replies; 11+ messages in thread
From: Guangwen Feng @ 2016-06-15  3:43 UTC (permalink / raw)
  To: fstests; +Cc: Guangwen Feng

Hi, Eryu.
Thanks for your review and kindly reply!

On 06/15/2016 11:35 AM, Eryu Guan wrote:
> On Tue, Jun 14, 2016 at 12:39:42PM +0800, Eryu Guan wrote:
>> On Tue, Jun 14, 2016 at 10:58:59AM +0800, Guangwen Feng wrote:
>>> Commit c9eb13a fixed this bug:
>>> 	ext4: fix hang when processing corrupted orphaned inode list
>>>
>>> Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
>>
>> Looks good to me overall. Some minor issues inline below
>>
> [snip]
>>
>>> +	debugfs -w -R "ssv last_orphan $i" $SCRATCH_DEV >>$seqres.full 2>&1
>>
>> You defined $DEBUGFS_PROG, use it here :)
>>
>>> +	_scratch_mount
>>> +	_scratch_unmount
>>
>> There's a new helper to do this now, _scratch_cycle_mount
> 
> Sorry, the helper doesn't help here, it umount first then mount.  You're
> doing mount then umount.

Got it.
I was just writing to explain this actually. :)
Thanks again.

> 
> Thanks,
> Eryu
> 
> 
> 



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

* [PATCH v3] shared: regression test for hang when processing corrupted orphaned inode list
  2016-06-14  4:39     ` Eryu Guan
  2016-06-15  3:35       ` Eryu Guan
@ 2016-06-15  5:21       ` Guangwen Feng
  2016-06-15 22:55         ` Dave Chinner
  1 sibling, 1 reply; 11+ messages in thread
From: Guangwen Feng @ 2016-06-15  5:21 UTC (permalink / raw)
  To: fstests; +Cc: Guangwen Feng

Commit c9eb13a fixed this bug:
	ext4: fix hang when processing corrupted orphaned inode list

Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
---
 common/config        |  1 +
 tests/shared/004     | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/shared/004.out |  2 ++
 tests/shared/group   |  1 +
 4 files changed, 68 insertions(+)
 create mode 100755 tests/shared/004
 create mode 100644 tests/shared/004.out

diff --git a/common/config b/common/config
index cacd815..c25b1ec 100644
--- a/common/config
+++ b/common/config
@@ -195,6 +195,7 @@ export DUMP_PROG="`set_prog_path dump`"
 export RESTORE_PROG="`set_prog_path restore`"
 export LVM_PROG="`set_prog_path lvm`"
 export CHATTR_PROG="`set_prog_path chattr`"
+export DEBUGFS_PROG="`set_prog_path debugfs`"
 
 # use 'udevadm settle' or 'udevsettle' to wait for lv to be settled.
 # newer systems have udevadm command but older systems like RHEL5 don't.
diff --git a/tests/shared/004 b/tests/shared/004
new file mode 100755
index 0000000..f108910
--- /dev/null
+++ b/tests/shared/004
@@ -0,0 +1,64 @@
+#! /bin/bash
+# FS QA Test 004
+#
+# Regression test for commit:
+# c9eb13a ext4: fix hang when processing corrupted orphaned inode list
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2016 Fujitsu.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#-----------------------------------------------------------------------
+#
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+tmp=/tmp/$$
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+
+# real QA test starts here
+_supported_fs ext2 ext3 ext4
+_supported_os Linux
+_require_scratch
+_require_command "$DEBUGFS_PROG" debugfs
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+echo "Silence is golden"
+
+# although The bug only happens when last_orphan is set to 5
+# it is better to test all reserved inode numbers 1-10 here
+for i in {1..10}; do
+	# create smaller filesystems to save test time
+	_scratch_mkfs_sized $((16 * 1024 * 1024)) >>$seqres.full 2>&1
+	$DEBUGFS_PROG -w -R "ssv last_orphan $i" $SCRATCH_DEV >>$seqres.full 2>&1
+	_scratch_mount
+	_scratch_unmount
+done
+
+# success, all done
+status=0
+exit
diff --git a/tests/shared/004.out b/tests/shared/004.out
new file mode 100644
index 0000000..af8614a
--- /dev/null
+++ b/tests/shared/004.out
@@ -0,0 +1,2 @@
+QA output created by 004
+Silence is golden
diff --git a/tests/shared/group b/tests/shared/group
index ba8a3f0..55bb594 100644
--- a/tests/shared/group
+++ b/tests/shared/group
@@ -6,6 +6,7 @@
 001 auto quick
 002 auto metadata quick
 003 auto quick
+004 auto quick
 006 auto enospc
 032 mkfs auto quick
 051 acl udf auto quick
-- 
1.8.4.2




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

* Re: [PATCH v3] shared: regression test for hang when processing corrupted orphaned inode list
  2016-06-15  5:21       ` [PATCH v3] " Guangwen Feng
@ 2016-06-15 22:55         ` Dave Chinner
  2016-06-16  3:41           ` [PATCH v4] " Guangwen Feng
  0 siblings, 1 reply; 11+ messages in thread
From: Dave Chinner @ 2016-06-15 22:55 UTC (permalink / raw)
  To: Guangwen Feng; +Cc: fstests

On Wed, Jun 15, 2016 at 01:21:31PM +0800, Guangwen Feng wrote:
> Commit c9eb13a fixed this bug:
> 	ext4: fix hang when processing corrupted orphaned inode list

Unfortunately, I don't know what this bug is, or what the test is
actually doing from this description or from reading the actual
test.  Please assume that not just the reviewer but someone reading
this description 5 yers from now knows *nothing* about the problem
the test addresses. Hence the patch description needs to explain
more fully what the problem is that the test is exercising....

It's also unfortunate that kernel tree commits are being referenced
without saying what tree they belong to. i.e. this should read
"kernel commit ab1234cd" so we know that commit is not something
from the fstests tree, or e2fsprogs, or some other unknown tree.
Again - think about someone reading this in 5 years time and trying
to work out what it means...

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

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

* [PATCH v4] shared: regression test for hang when processing corrupted orphaned inode list
  2016-06-15 22:55         ` Dave Chinner
@ 2016-06-16  3:41           ` Guangwen Feng
  0 siblings, 0 replies; 11+ messages in thread
From: Guangwen Feng @ 2016-06-16  3:41 UTC (permalink / raw)
  To: david; +Cc: fstests, Guangwen Feng

Kernel commit c9eb13a fixed this bug:
	ext4: fix hang when processing corrupted orphaned inode list

Bug description:
	If the orphaned inode list contains inode #5, ext4_iget()
	returns a bad inode (since the bootloader inode should never
	be referenced directly). Because of the bad inode, we end up
	processing the inode repeatedly and this hangs the machine.

Test description:
	We manually set the superblock field last_orphan to 1~10
	(although the bug only happens when last_orphan is set to 5
	it is better to test all reserved inode numbers 1~10 here)
	and mount the fs in a loop to trigger the bug.

Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
---
 common/config        |  1 +
 tests/shared/004     | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/shared/004.out |  2 ++
 tests/shared/group   |  1 +
 4 files changed, 68 insertions(+)
 create mode 100755 tests/shared/004
 create mode 100644 tests/shared/004.out

diff --git a/common/config b/common/config
index cacd815..c25b1ec 100644
--- a/common/config
+++ b/common/config
@@ -195,6 +195,7 @@ export DUMP_PROG="`set_prog_path dump`"
 export RESTORE_PROG="`set_prog_path restore`"
 export LVM_PROG="`set_prog_path lvm`"
 export CHATTR_PROG="`set_prog_path chattr`"
+export DEBUGFS_PROG="`set_prog_path debugfs`"
 
 # use 'udevadm settle' or 'udevsettle' to wait for lv to be settled.
 # newer systems have udevadm command but older systems like RHEL5 don't.
diff --git a/tests/shared/004 b/tests/shared/004
new file mode 100755
index 0000000..b9eaa15
--- /dev/null
+++ b/tests/shared/004
@@ -0,0 +1,64 @@
+#! /bin/bash
+# FS QA Test 004
+#
+# Regression test for commit:
+# c9eb13a ext4: fix hang when processing corrupted orphaned inode list
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2016 Fujitsu.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#-----------------------------------------------------------------------
+#
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+tmp=/tmp/$$
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+
+# real QA test starts here
+_supported_fs ext2 ext3 ext4
+_supported_os Linux
+_require_scratch
+_require_command "$DEBUGFS_PROG" debugfs
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+echo "Silence is golden"
+
+# although the bug only happens when last_orphan is set to 5
+# it is better to test all reserved inode numbers 1-10 here
+for i in {1..10}; do
+	# create smaller filesystems to save test time
+	_scratch_mkfs_sized $((16 * 1024 * 1024)) >>$seqres.full 2>&1
+	$DEBUGFS_PROG -w -R "ssv last_orphan $i" $SCRATCH_DEV >>$seqres.full 2>&1
+	_scratch_mount
+	_scratch_unmount
+done
+
+# success, all done
+status=0
+exit
diff --git a/tests/shared/004.out b/tests/shared/004.out
new file mode 100644
index 0000000..af8614a
--- /dev/null
+++ b/tests/shared/004.out
@@ -0,0 +1,2 @@
+QA output created by 004
+Silence is golden
diff --git a/tests/shared/group b/tests/shared/group
index ba8a3f0..55bb594 100644
--- a/tests/shared/group
+++ b/tests/shared/group
@@ -6,6 +6,7 @@
 001 auto quick
 002 auto metadata quick
 003 auto quick
+004 auto quick
 006 auto enospc
 032 mkfs auto quick
 051 acl udf auto quick
-- 
1.8.4.2




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

end of thread, other threads:[~2016-06-16  3:40 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-13  9:09 [PATCH] ext4: regression test for hang when processing corrupted orphaned inode list Guangwen Feng
2016-06-13  9:33 ` Eryu Guan
2016-06-13 10:15   ` Guangwen Feng
2016-06-14  2:31     ` Guangwen Feng
2016-06-14  2:58   ` [PATCH v2] shared: " Guangwen Feng
2016-06-14  4:39     ` Eryu Guan
2016-06-15  3:35       ` Eryu Guan
2016-06-15  3:43         ` Guangwen Feng
2016-06-15  5:21       ` [PATCH v3] " Guangwen Feng
2016-06-15 22:55         ` Dave Chinner
2016-06-16  3:41           ` [PATCH v4] " Guangwen Feng

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.