diff mbox series

[2/2] df01.sh: Use tst_fsfreeze for XFS on kernel >= 5.19

Message ID 20230307145517.1359-3-pvorel@suse.cz
State Accepted
Headers show
Series df01.sh: fix for XFS on kernel >= 5.19 | expand

Commit Message

Petr Vorel March 7, 2023, 2:55 p.m. UTC
XFS since kernel 5.19 postpone certain operation.  Use LTP fsfreeze
implementation to force all the background garbage collection to run
to completion.

Link: https://lore.kernel.org/linux-block/974cc110-d47e-5fae-af5f-e2e610720e2d@redhat.com/
Suggested-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 testcases/commands/df/df01.sh | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Cyril Hrubis March 13, 2023, 2:38 p.m. UTC | #1
Hi!
> XFS since kernel 5.19 postpone certain operation.  Use LTP fsfreeze
> implementation to force all the background garbage collection to run
> to completion.
> 
> Link: https://lore.kernel.org/linux-block/974cc110-d47e-5fae-af5f-e2e610720e2d@redhat.com/
> Suggested-by: Eric Sandeen <sandeen@redhat.com>
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
>  testcases/commands/df/df01.sh | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/testcases/commands/df/df01.sh b/testcases/commands/df/df01.sh
> index ae0449c3c..699d1538f 100755
> --- a/testcases/commands/df/df01.sh
> +++ b/testcases/commands/df/df01.sh
> @@ -1,7 +1,7 @@
>  #!/bin/sh
>  # SPDX-License-Identifier: GPL-2.0-or-later
>  # Copyright (c) 2015 Fujitsu Ltd.
> -# Copyright (c) 2018-2022 Petr Vorel <pvorel@suse.cz>
> +# Copyright (c) 2018-2023 Petr Vorel <pvorel@suse.cz>
>  # Author: Zhang Jin <jy_zhangjin@cn.fujitsu.com>
>  #
>  # Test df command with some basic options.
> @@ -46,6 +46,11 @@ df_test()
>  
>  	ROD_SILENT rm -rf $TST_MNTPOINT/testimg
>  
> +	# force all the background garbage collection to run to completion
> +	if [ "$TST_FS_TYPE" = "xfs" ] && tst_kvcmp -ge "5.19"; then
> +		tst_fsfreeze $TST_MNTPOINT
> +	fi

This looks overly specific, can't we just freeze and unfreeze the FS
without looking at kernel version? Or will we get errors on older XFS?

I suppose that this may still start to fail on distribution kernels if
some of the newer functionality gets backported...

Otherwise it looks good.
Eric Sandeen March 13, 2023, 3:09 p.m. UTC | #2
On 3/13/23 9:38 AM, Cyril Hrubis wrote:
> Hi!
>> XFS since kernel 5.19 postpone certain operation.  Use LTP fsfreeze
>> implementation to force all the background garbage collection to run
>> to completion.
>>
>> Link: https://lore.kernel.org/linux-block/974cc110-d47e-5fae-af5f-e2e610720e2d@redhat.com/
>> Suggested-by: Eric Sandeen <sandeen@redhat.com>
>> Signed-off-by: Petr Vorel <pvorel@suse.cz>
>> ---
>>  testcases/commands/df/df01.sh | 7 ++++++-
>>  1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/testcases/commands/df/df01.sh b/testcases/commands/df/df01.sh
>> index ae0449c3c..699d1538f 100755
>> --- a/testcases/commands/df/df01.sh
>> +++ b/testcases/commands/df/df01.sh
>> @@ -1,7 +1,7 @@
>>  #!/bin/sh
>>  # SPDX-License-Identifier: GPL-2.0-or-later
>>  # Copyright (c) 2015 Fujitsu Ltd.
>> -# Copyright (c) 2018-2022 Petr Vorel <pvorel@suse.cz>
>> +# Copyright (c) 2018-2023 Petr Vorel <pvorel@suse.cz>
>>  # Author: Zhang Jin <jy_zhangjin@cn.fujitsu.com>
>>  #
>>  # Test df command with some basic options.
>> @@ -46,6 +46,11 @@ df_test()
>>  
>>  	ROD_SILENT rm -rf $TST_MNTPOINT/testimg
>>  
>> +	# force all the background garbage collection to run to completion
>> +	if [ "$TST_FS_TYPE" = "xfs" ] && tst_kvcmp -ge "5.19"; then
>> +		tst_fsfreeze $TST_MNTPOINT
>> +	fi
> 
> This looks overly specific, can't we just freeze and unfreeze the FS
> without looking at kernel version? Or will we get errors on older XFS?
> 
> I suppose that this may still start to fail on distribution kernels if
> some of the newer functionality gets backported...

Yup, I agree. Freeze should be safe for any kernel, I wouldn't condition it either.

(You do want to be very sure that you're not freezing the root fs, tho,
if that is any possibility.)

-Eric

> Otherwise it looks good.
>
Petr Vorel March 13, 2023, 3:30 p.m. UTC | #3
> On 3/13/23 9:38 AM, Cyril Hrubis wrote:
> > Hi!
> >> XFS since kernel 5.19 postpone certain operation.  Use LTP fsfreeze
> >> implementation to force all the background garbage collection to run
> >> to completion.

> >> Link: https://lore.kernel.org/linux-block/974cc110-d47e-5fae-af5f-e2e610720e2d@redhat.com/
> >> Suggested-by: Eric Sandeen <sandeen@redhat.com>
> >> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> >> ---
> >>  testcases/commands/df/df01.sh | 7 ++++++-
> >>  1 file changed, 6 insertions(+), 1 deletion(-)

> >> diff --git a/testcases/commands/df/df01.sh b/testcases/commands/df/df01.sh
> >> index ae0449c3c..699d1538f 100755
> >> --- a/testcases/commands/df/df01.sh
> >> +++ b/testcases/commands/df/df01.sh
> >> @@ -1,7 +1,7 @@
> >>  #!/bin/sh
> >>  # SPDX-License-Identifier: GPL-2.0-or-later
> >>  # Copyright (c) 2015 Fujitsu Ltd.
> >> -# Copyright (c) 2018-2022 Petr Vorel <pvorel@suse.cz>
> >> +# Copyright (c) 2018-2023 Petr Vorel <pvorel@suse.cz>
> >>  # Author: Zhang Jin <jy_zhangjin@cn.fujitsu.com>

> >>  # Test df command with some basic options.
> >> @@ -46,6 +46,11 @@ df_test()

> >>  	ROD_SILENT rm -rf $TST_MNTPOINT/testimg

> >> +	# force all the background garbage collection to run to completion
> >> +	if [ "$TST_FS_TYPE" = "xfs" ] && tst_kvcmp -ge "5.19"; then
> >> +		tst_fsfreeze $TST_MNTPOINT
> >> +	fi

> > This looks overly specific, can't we just freeze and unfreeze the FS
> > without looking at kernel version? Or will we get errors on older XFS?

> > I suppose that this may still start to fail on distribution kernels if
> > some of the newer functionality gets backported...

So far it's OK on SLES, likely nothing related has been backported to it.
I wonder if we should remove the check or just wait till first complaint.

> Yup, I agree. Freeze should be safe for any kernel, I wouldn't condition it either.

> (You do want to be very sure that you're not freezing the root fs, tho,
> if that is any possibility.)

$TST_MNTPOINT in on $TMPDIR, which is by default /tmp. In case of /tmp being on
root fs we're freezing root tmpfs. But it works on openSUSE, which found the
problem.

Kind regards,
Petr

> -Eric

> > Otherwise it looks good.
Petr Vorel March 13, 2023, 3:33 p.m. UTC | #4
> > On 3/13/23 9:38 AM, Cyril Hrubis wrote:
> > > Hi!
> > >> XFS since kernel 5.19 postpone certain operation.  Use LTP fsfreeze
> > >> implementation to force all the background garbage collection to run
> > >> to completion.

> > >> Link: https://lore.kernel.org/linux-block/974cc110-d47e-5fae-af5f-e2e610720e2d@redhat.com/
> > >> Suggested-by: Eric Sandeen <sandeen@redhat.com>
> > >> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > >> ---
> > >>  testcases/commands/df/df01.sh | 7 ++++++-
> > >>  1 file changed, 6 insertions(+), 1 deletion(-)

> > >> diff --git a/testcases/commands/df/df01.sh b/testcases/commands/df/df01.sh
> > >> index ae0449c3c..699d1538f 100755
> > >> --- a/testcases/commands/df/df01.sh
> > >> +++ b/testcases/commands/df/df01.sh
> > >> @@ -1,7 +1,7 @@
> > >>  #!/bin/sh
> > >>  # SPDX-License-Identifier: GPL-2.0-or-later
> > >>  # Copyright (c) 2015 Fujitsu Ltd.
> > >> -# Copyright (c) 2018-2022 Petr Vorel <pvorel@suse.cz>
> > >> +# Copyright (c) 2018-2023 Petr Vorel <pvorel@suse.cz>
> > >>  # Author: Zhang Jin <jy_zhangjin@cn.fujitsu.com>

> > >>  # Test df command with some basic options.
> > >> @@ -46,6 +46,11 @@ df_test()

> > >>  	ROD_SILENT rm -rf $TST_MNTPOINT/testimg

> > >> +	# force all the background garbage collection to run to completion
> > >> +	if [ "$TST_FS_TYPE" = "xfs" ] && tst_kvcmp -ge "5.19"; then
> > >> +		tst_fsfreeze $TST_MNTPOINT
> > >> +	fi

> > > This looks overly specific, can't we just freeze and unfreeze the FS
> > > without looking at kernel version? Or will we get errors on older XFS?

> > > I suppose that this may still start to fail on distribution kernels if
> > > some of the newer functionality gets backported...

> So far it's OK on SLES, likely nothing related has been backported to it.
> I wonder if we should remove the check or just wait till first complaint.

Well, I haven't seen any problems with older kernels, but I'll retest it more.
I don't expect any problems, thus I'm OK with removing it.

Kind regards,
Petr

> > Yup, I agree. Freeze should be safe for any kernel, I wouldn't condition it either.

> > (You do want to be very sure that you're not freezing the root fs, tho,
> > if that is any possibility.)

> $TST_MNTPOINT in on $TMPDIR, which is by default /tmp. In case of /tmp being on
> root fs we're freezing root tmpfs. But it works on openSUSE, which found the
> problem.

> Kind regards,
> Petr

> > -Eric

> > > Otherwise it looks good.
Darrick J. Wong March 13, 2023, 4:12 p.m. UTC | #5
On Mon, Mar 13, 2023 at 04:33:09PM +0100, Petr Vorel wrote:
> > > On 3/13/23 9:38 AM, Cyril Hrubis wrote:
> > > > Hi!
> > > >> XFS since kernel 5.19 postpone certain operation.  Use LTP fsfreeze
> > > >> implementation to force all the background garbage collection to run
> > > >> to completion.
> 
> > > >> Link: https://lore.kernel.org/linux-block/974cc110-d47e-5fae-af5f-e2e610720e2d@redhat.com/
> > > >> Suggested-by: Eric Sandeen <sandeen@redhat.com>
> > > >> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > > >> ---
> > > >>  testcases/commands/df/df01.sh | 7 ++++++-
> > > >>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> > > >> diff --git a/testcases/commands/df/df01.sh b/testcases/commands/df/df01.sh
> > > >> index ae0449c3c..699d1538f 100755
> > > >> --- a/testcases/commands/df/df01.sh
> > > >> +++ b/testcases/commands/df/df01.sh
> > > >> @@ -1,7 +1,7 @@
> > > >>  #!/bin/sh
> > > >>  # SPDX-License-Identifier: GPL-2.0-or-later
> > > >>  # Copyright (c) 2015 Fujitsu Ltd.
> > > >> -# Copyright (c) 2018-2022 Petr Vorel <pvorel@suse.cz>
> > > >> +# Copyright (c) 2018-2023 Petr Vorel <pvorel@suse.cz>
> > > >>  # Author: Zhang Jin <jy_zhangjin@cn.fujitsu.com>
> 
> > > >>  # Test df command with some basic options.
> > > >> @@ -46,6 +46,11 @@ df_test()
> 
> > > >>  	ROD_SILENT rm -rf $TST_MNTPOINT/testimg
> 
> > > >> +	# force all the background garbage collection to run to completion
> > > >> +	if [ "$TST_FS_TYPE" = "xfs" ] && tst_kvcmp -ge "5.19"; then
> > > >> +		tst_fsfreeze $TST_MNTPOINT
> > > >> +	fi
> 
> > > > This looks overly specific, can't we just freeze and unfreeze the FS
> > > > without looking at kernel version? Or will we get errors on older XFS?
> 
> > > > I suppose that this may still start to fail on distribution kernels if
> > > > some of the newer functionality gets backported...
> 
> > So far it's OK on SLES, likely nothing related has been backported to it.
> > I wonder if we should remove the check or just wait till first complaint.
> 
> Well, I haven't seen any problems with older kernels, but I'll retest it more.
> I don't expect any problems, thus I'm OK with removing it.

If the fs doesn't support freezing (e.g. tmpfs), you'll get a -1 return
value and errno == EOPNOTUPP or NOTTY.  Is that going to cause the test
to fail due to tst_brk?

> Kind regards,
> Petr
> 
> > > Yup, I agree. Freeze should be safe for any kernel, I wouldn't condition it either.
> 
> > > (You do want to be very sure that you're not freezing the root fs, tho,
> > > if that is any possibility.)

Why?  Are you worried about not being able to unfreeze the rootfs?
I know fstests has had problems with people doing:

xfs_io -c freeze "/$moo"	# whoops, moo is undefined
<something that blocks>
xfs_io -c thaw "/$moo"		# never gets here

But that's not the case here.

Even if it is the rootfs, the text page containing the two ioctls should
be in memory due to the instruction pointer, and even if it gets paged
out, freezes don't block read faults.

--D

> > $TST_MNTPOINT in on $TMPDIR, which is by default /tmp. In case of /tmp being on
> > root fs we're freezing root tmpfs. But it works on openSUSE, which found the
> > problem.
> 
> > Kind regards,
> > Petr
> 
> > > -Eric
> 
> > > > Otherwise it looks good.
> 
>
Petr Vorel March 13, 2023, 10:08 p.m. UTC | #6
> On Mon, Mar 13, 2023 at 04:33:09PM +0100, Petr Vorel wrote:
> > > > On 3/13/23 9:38 AM, Cyril Hrubis wrote:
> > > > > Hi!
> > > > >> XFS since kernel 5.19 postpone certain operation.  Use LTP fsfreeze
> > > > >> implementation to force all the background garbage collection to run
> > > > >> to completion.

> > > > >> Link: https://lore.kernel.org/linux-block/974cc110-d47e-5fae-af5f-e2e610720e2d@redhat.com/
> > > > >> Suggested-by: Eric Sandeen <sandeen@redhat.com>
> > > > >> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > > > >> ---
> > > > >>  testcases/commands/df/df01.sh | 7 ++++++-
> > > > >>  1 file changed, 6 insertions(+), 1 deletion(-)

> > > > >> diff --git a/testcases/commands/df/df01.sh b/testcases/commands/df/df01.sh
> > > > >> index ae0449c3c..699d1538f 100755
> > > > >> --- a/testcases/commands/df/df01.sh
> > > > >> +++ b/testcases/commands/df/df01.sh
> > > > >> @@ -1,7 +1,7 @@
> > > > >>  #!/bin/sh
> > > > >>  # SPDX-License-Identifier: GPL-2.0-or-later
> > > > >>  # Copyright (c) 2015 Fujitsu Ltd.
> > > > >> -# Copyright (c) 2018-2022 Petr Vorel <pvorel@suse.cz>
> > > > >> +# Copyright (c) 2018-2023 Petr Vorel <pvorel@suse.cz>
> > > > >>  # Author: Zhang Jin <jy_zhangjin@cn.fujitsu.com>

> > > > >>  # Test df command with some basic options.
> > > > >> @@ -46,6 +46,11 @@ df_test()

> > > > >>  	ROD_SILENT rm -rf $TST_MNTPOINT/testimg

> > > > >> +	# force all the background garbage collection to run to completion
> > > > >> +	if [ "$TST_FS_TYPE" = "xfs" ] && tst_kvcmp -ge "5.19"; then
> > > > >> +		tst_fsfreeze $TST_MNTPOINT
> > > > >> +	fi

> > > > > This looks overly specific, can't we just freeze and unfreeze the FS
> > > > > without looking at kernel version? Or will we get errors on older XFS?

> > > > > I suppose that this may still start to fail on distribution kernels if
> > > > > some of the newer functionality gets backported...

> > > So far it's OK on SLES, likely nothing related has been backported to it.
> > > I wonder if we should remove the check or just wait till first complaint.

> > Well, I haven't seen any problems with older kernels, but I'll retest it more.
> > I don't expect any problems, thus I'm OK with removing it.

> If the fs doesn't support freezing (e.g. tmpfs), you'll get a -1 return
> value and errno == EOPNOTUPP or NOTTY.  Is that going to cause the test
> to fail due to tst_brk?

FYI I haven't noticed any problem so far, but need to test more.

> > Kind regards,
> > Petr

> > > > Yup, I agree. Freeze should be safe for any kernel, I wouldn't condition it either.

> > > > (You do want to be very sure that you're not freezing the root fs, tho,
> > > > if that is any possibility.)

> Why?  Are you worried about not being able to unfreeze the rootfs?
> I know fstests has had problems with people doing:

> xfs_io -c freeze "/$moo"	# whoops, moo is undefined
> <something that blocks>
> xfs_io -c thaw "/$moo"		# never gets here

> But that's not the case here.

Yes, if you mean "/", that's not going to happen ($TST_MNTPOINT is never going
to be "/").  I'm sorry, I mixed up mountpoint (used by fsfreeze and therefore
also tst_fsfreeze.c) and device (=> there shouldn't be a problem).

Kind regards,
Petr

> Even if it is the rootfs, the text page containing the two ioctls should
> be in memory due to the instruction pointer, and even if it gets paged
> out, freezes don't block read faults.

> --D

> > > $TST_MNTPOINT in on $TMPDIR, which is by default /tmp. In case of /tmp being on
> > > root fs we're freezing root tmpfs. But it works on openSUSE, which found the
> > > problem.

> > > Kind regards,
> > > Petr

> > > > -Eric

> > > > > Otherwise it looks good.
Petr Vorel March 15, 2023, 12:23 p.m. UTC | #7
Hi all,

FYI merged without kernel specific check.
Thanks all for your input.

Kind regards,
Petr
diff mbox series

Patch

diff --git a/testcases/commands/df/df01.sh b/testcases/commands/df/df01.sh
index ae0449c3c..699d1538f 100755
--- a/testcases/commands/df/df01.sh
+++ b/testcases/commands/df/df01.sh
@@ -1,7 +1,7 @@ 
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0-or-later
 # Copyright (c) 2015 Fujitsu Ltd.
-# Copyright (c) 2018-2022 Petr Vorel <pvorel@suse.cz>
+# Copyright (c) 2018-2023 Petr Vorel <pvorel@suse.cz>
 # Author: Zhang Jin <jy_zhangjin@cn.fujitsu.com>
 #
 # Test df command with some basic options.
@@ -46,6 +46,11 @@  df_test()
 
 	ROD_SILENT rm -rf $TST_MNTPOINT/testimg
 
+	# force all the background garbage collection to run to completion
+	if [ "$TST_FS_TYPE" = "xfs" ] && tst_kvcmp -ge "5.19"; then
+		tst_fsfreeze $TST_MNTPOINT
+	fi
+
 	# flush file system buffers, then we can get the actual sizes.
 	sync
 }