diff mbox series

check: Fix fs specfic imports when $FSTYPE!=$OLD_FSTYPE

Message ID f49a72d9ee4cfb621c7f3516dc388b4c80457115.1736695253.git.nirjhar.roy.lists@gmail.com (mailing list archive)
State New
Headers show
Series check: Fix fs specfic imports when $FSTYPE!=$OLD_FSTYPE | expand

Commit Message

Nirjhar Roy (IBM) Jan. 12, 2025, 3:21 p.m. UTC
Bug Description:

_test_mount function is failing with the following error:
./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found
check: failed to mount /dev/loop0 on /mnt1/test

when the second section in local.config file is xfs and the first section
is non-xfs.

It can be easily reproduced with the following local.config file

[s2]
export FSTYP=ext4
export TEST_DEV=/dev/loop0
export TEST_DIR=/mnt1/test
export SCRATCH_DEV=/dev/loop1
export SCRATCH_MNT=/mnt1/scratch

[s1]
export FSTYP=xfs
export TEST_DEV=/dev/loop0
export TEST_DIR=/mnt1/test
export SCRATCH_DEV=/dev/loop1
export SCRATCH_MNT=/mnt1/scratch

./check selftest/001

Root cause:
When _test_mount() is executed for the second section, the FSTYPE has
already changed but the new fs specific common/$FSTYP has not yet
been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
the test run fails.

Fix:
call _source_specific_fs $FSTYP at the correct call site of  _test_mount()

Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
---
 check | 1 +
 1 file changed, 1 insertion(+)

Comments

Ritesh Harjani (IBM) Jan. 12, 2025, 7:41 p.m. UTC | #1
"Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:

> Bug Description:
>
> _test_mount function is failing with the following error:
> ./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found
> check: failed to mount /dev/loop0 on /mnt1/test
>
> when the second section in local.config file is xfs and the first section
> is non-xfs.
>
> It can be easily reproduced with the following local.config file
>
> [s2]
> export FSTYP=ext4
> export TEST_DEV=/dev/loop0
> export TEST_DIR=/mnt1/test
> export SCRATCH_DEV=/dev/loop1
> export SCRATCH_MNT=/mnt1/scratch
>
> [s1]
> export FSTYP=xfs
> export TEST_DEV=/dev/loop0
> export TEST_DIR=/mnt1/test
> export SCRATCH_DEV=/dev/loop1
> export SCRATCH_MNT=/mnt1/scratch
>
> ./check selftest/001
>
> Root cause:
> When _test_mount() is executed for the second section, the FSTYPE has
> already changed but the new fs specific common/$FSTYP has not yet
> been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
> the test run fails.
>
> Fix:
> call _source_specific_fs $FSTYP at the correct call site of  _test_mount()
>

You should add the Fixes: tag too. Based on your description I guess
this should be the tag?

Fixes: 1a49022fab9b4 ("fstests: always use fail-at-unmount semantics for XFS")

I agree with today the problem was in _test_mount(), tomorrow it could
be _test_mkfs, hence we could source the new FSTYP config file before
calling _test_mkfs().

With the fixes tag added, please feel free to add:

Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>

> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> ---
>  check | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/check b/check
> index 607d2456..8cdbb68f 100755
> --- a/check
> +++ b/check
> @@ -776,6 +776,7 @@ function run_section()
>  	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>  		echo "RECREATING    -- $FSTYP on $TEST_DEV"
>  		_test_unmount 2> /dev/null
> +		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP
>  		if ! _test_mkfs >$tmp.err 2>&1
>  		then
>  			echo "our local _test_mkfs routine ..."
> -- 
> 2.34.1
Zorro Lang Jan. 13, 2025, 5:59 a.m. UTC | #2
On Sun, Jan 12, 2025 at 03:21:51PM +0000, Nirjhar Roy (IBM) wrote:
> Bug Description:
> 
> _test_mount function is failing with the following error:
> ./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found
> check: failed to mount /dev/loop0 on /mnt1/test
> 
> when the second section in local.config file is xfs and the first section
> is non-xfs.
> 
> It can be easily reproduced with the following local.config file
> 
> [s2]
> export FSTYP=ext4
> export TEST_DEV=/dev/loop0
> export TEST_DIR=/mnt1/test
> export SCRATCH_DEV=/dev/loop1
> export SCRATCH_MNT=/mnt1/scratch
> 
> [s1]
> export FSTYP=xfs
> export TEST_DEV=/dev/loop0
> export TEST_DIR=/mnt1/test
> export SCRATCH_DEV=/dev/loop1
> export SCRATCH_MNT=/mnt1/scratch
> 
> ./check selftest/001
> 
> Root cause:
> When _test_mount() is executed for the second section, the FSTYPE has
> already changed but the new fs specific common/$FSTYP has not yet
> been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
> the test run fails.
> 
> Fix:
> call _source_specific_fs $FSTYP at the correct call site of  _test_mount()
> 
> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> ---
>  check | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/check b/check
> index 607d2456..8cdbb68f 100755
> --- a/check
> +++ b/check
> @@ -776,6 +776,7 @@ function run_section()
>  	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>  		echo "RECREATING    -- $FSTYP on $TEST_DEV"
>  		_test_unmount 2> /dev/null
> +		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP

The _source_specific_fs is called when importing common/rc file:

  # check for correct setup and source the $FSTYP specific functions now
  _source_specific_fs $FSTYP

From the code logic of check script:

        if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
                echo "RECREATING    -- $FSTYP on $TEST_DEV"
                _test_unmount 2> /dev/null
                if ! _test_mkfs >$tmp.err 2>&1
                then
                        echo "our local _test_mkfs routine ..."
                        cat $tmp.err
                        echo "check: failed to mkfs \$TEST_DEV using specified options"
                        status=1
                        exit
                fi
                if ! _test_mount
                then
                        echo "check: failed to mount $TEST_DEV on $TEST_DIR"
                        status=1
                        exit
                fi
                # TEST_DEV has been recreated, previous FSTYP derived from
                # TEST_DEV could be changed, source common/rc again with
                # correct FSTYP to get FSTYP specific configs, e.g. common/xfs
                . common/rc
                ^^^^^^^^^^^
we import common/rc at here. 

So I'm wondering if we can move this line upward, to fix the problem you
hit (and don't bring in regression :) Does that help?

Thanks,
Zorro


>  		if ! _test_mkfs >$tmp.err 2>&1
>  		then
>  			echo "our local _test_mkfs routine ..."
> -- 
> 2.34.1
> 
>
Nirjhar Roy (IBM) Jan. 13, 2025, 5:59 a.m. UTC | #3
On 1/13/25 01:11, Ritesh Harjani (IBM) wrote:
> "Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:
>
>> Bug Description:
>>
>> _test_mount function is failing with the following error:
>> ./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found
>> check: failed to mount /dev/loop0 on /mnt1/test
>>
>> when the second section in local.config file is xfs and the first section
>> is non-xfs.
>>
>> It can be easily reproduced with the following local.config file
>>
>> [s2]
>> export FSTYP=ext4
>> export TEST_DEV=/dev/loop0
>> export TEST_DIR=/mnt1/test
>> export SCRATCH_DEV=/dev/loop1
>> export SCRATCH_MNT=/mnt1/scratch
>>
>> [s1]
>> export FSTYP=xfs
>> export TEST_DEV=/dev/loop0
>> export TEST_DIR=/mnt1/test
>> export SCRATCH_DEV=/dev/loop1
>> export SCRATCH_MNT=/mnt1/scratch
>>
>> ./check selftest/001
>>
>> Root cause:
>> When _test_mount() is executed for the second section, the FSTYPE has
>> already changed but the new fs specific common/$FSTYP has not yet
>> been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
>> the test run fails.
>>
>> Fix:
>> call _source_specific_fs $FSTYP at the correct call site of  _test_mount()
> You should add the Fixes: tag too. Based on your description I guess
> this should be the tag?
>
> Fixes: 1a49022fab9b4 ("fstests: always use fail-at-unmount semantics for XFS")

Shouldn't this be the following?

commit f8e4f532f18d7517430d9849bfc042305d7f7f4d (HEAD)
Author: Lukas Czerner <lczerner@redhat.com>
Date:   Fri Apr 4 17:18:15 2014 +1100

     check: Allow to recreate TEST_DEV

     Add config option RECREATE_TEST_DEV to allow to recreate file system on
     the TEST_DEV device. Permitted values are true and false.

     If RECREATE_TEST_DEV is set to true the TEST_DEV device will be
     unmounted and FSTYP file system will be created on it. Afterwards it
     will be mounted to TEST_DIR again with the default, or specified mount
     options.

     Also recreate the file system if FSTYP differs from the previous
     section.

>
> I agree with today the problem was in _test_mount(), tomorrow it could
> be _test_mkfs, hence we could source the new FSTYP config file before
> calling _test_mkfs().
>
> With the fixes tag added, please feel free to add:
>
> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
>
>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>> ---
>>   check | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/check b/check
>> index 607d2456..8cdbb68f 100755
>> --- a/check
>> +++ b/check
>> @@ -776,6 +776,7 @@ function run_section()
>>   	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>>   		echo "RECREATING    -- $FSTYP on $TEST_DEV"
>>   		_test_unmount 2> /dev/null
>> +		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP
>>   		if ! _test_mkfs >$tmp.err 2>&1
>>   		then
>>   			echo "our local _test_mkfs routine ..."
>> -- 
>> 2.34.1
Nirjhar Roy (IBM) Jan. 13, 2025, 8:52 a.m. UTC | #4
On 1/13/25 11:29, Zorro Lang wrote:
> On Sun, Jan 12, 2025 at 03:21:51PM +0000, Nirjhar Roy (IBM) wrote:
>> Bug Description:
>>
>> _test_mount function is failing with the following error:
>> ./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found
>> check: failed to mount /dev/loop0 on /mnt1/test
>>
>> when the second section in local.config file is xfs and the first section
>> is non-xfs.
>>
>> It can be easily reproduced with the following local.config file
>>
>> [s2]
>> export FSTYP=ext4
>> export TEST_DEV=/dev/loop0
>> export TEST_DIR=/mnt1/test
>> export SCRATCH_DEV=/dev/loop1
>> export SCRATCH_MNT=/mnt1/scratch
>>
>> [s1]
>> export FSTYP=xfs
>> export TEST_DEV=/dev/loop0
>> export TEST_DIR=/mnt1/test
>> export SCRATCH_DEV=/dev/loop1
>> export SCRATCH_MNT=/mnt1/scratch
>>
>> ./check selftest/001
>>
>> Root cause:
>> When _test_mount() is executed for the second section, the FSTYPE has
>> already changed but the new fs specific common/$FSTYP has not yet
>> been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
>> the test run fails.
>>
>> Fix:
>> call _source_specific_fs $FSTYP at the correct call site of  _test_mount()
>>
>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>> ---
>>   check | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/check b/check
>> index 607d2456..8cdbb68f 100755
>> --- a/check
>> +++ b/check
>> @@ -776,6 +776,7 @@ function run_section()
>>   	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>>   		echo "RECREATING    -- $FSTYP on $TEST_DEV"
>>   		_test_unmount 2> /dev/null
>> +		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP
> The _source_specific_fs is called when importing common/rc file:
>
>    # check for correct setup and source the $FSTYP specific functions now
>    _source_specific_fs $FSTYP
>
>  From the code logic of check script:
>
>          if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>                  echo "RECREATING    -- $FSTYP on $TEST_DEV"
>                  _test_unmount 2> /dev/null
>                  if ! _test_mkfs >$tmp.err 2>&1
>                  then
>                          echo "our local _test_mkfs routine ..."
>                          cat $tmp.err
>                          echo "check: failed to mkfs \$TEST_DEV using specified options"
>                          status=1
>                          exit
>                  fi
>                  if ! _test_mount
>                  then
>                          echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>                          status=1
>                          exit
>                  fi
>                  # TEST_DEV has been recreated, previous FSTYP derived from
>                  # TEST_DEV could be changed, source common/rc again with
>                  # correct FSTYP to get FSTYP specific configs, e.g. common/xfs
>                  . common/rc
>                  ^^^^^^^^^^^
> we import common/rc at here.
>
> So I'm wondering if we can move this line upward, to fix the problem you
> hit (and don't bring in regression :) Does that help?
>
> Thanks,
> Zorro

Okay so we can move ". common/rc" upward and then remove the following 
from "check" file:

         if ! _test_mount
         then
             echo "check: failed to mount $TEST_DEV on $TEST_DIR"
             status=1
             exit
         fi

since . common/rc will call init_rc() in the end, which does a 
_test_mount(). Do you agree with this (Zorro and Ritesh)?

I can make the changes and send a v2?

--NR

>
>
>>   		if ! _test_mkfs >$tmp.err 2>&1
>>   		then
>>   			echo "our local _test_mkfs routine ..."
>> -- 
>> 2.34.1
>>
>>
Zorro Lang Jan. 13, 2025, 1:11 p.m. UTC | #5
On Mon, Jan 13, 2025 at 02:22:20PM +0530, Nirjhar Roy (IBM) wrote:
> 
> On 1/13/25 11:29, Zorro Lang wrote:
> > On Sun, Jan 12, 2025 at 03:21:51PM +0000, Nirjhar Roy (IBM) wrote:
> > > Bug Description:
> > > 
> > > _test_mount function is failing with the following error:
> > > ./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found
> > > check: failed to mount /dev/loop0 on /mnt1/test
> > > 
> > > when the second section in local.config file is xfs and the first section
> > > is non-xfs.
> > > 
> > > It can be easily reproduced with the following local.config file
> > > 
> > > [s2]
> > > export FSTYP=ext4
> > > export TEST_DEV=/dev/loop0
> > > export TEST_DIR=/mnt1/test
> > > export SCRATCH_DEV=/dev/loop1
> > > export SCRATCH_MNT=/mnt1/scratch
> > > 
> > > [s1]
> > > export FSTYP=xfs
> > > export TEST_DEV=/dev/loop0
> > > export TEST_DIR=/mnt1/test
> > > export SCRATCH_DEV=/dev/loop1
> > > export SCRATCH_MNT=/mnt1/scratch
> > > 
> > > ./check selftest/001
> > > 
> > > Root cause:
> > > When _test_mount() is executed for the second section, the FSTYPE has
> > > already changed but the new fs specific common/$FSTYP has not yet
> > > been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
> > > the test run fails.
> > > 
> > > Fix:
> > > call _source_specific_fs $FSTYP at the correct call site of  _test_mount()
> > > 
> > > Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
> > > ---
> > >   check | 1 +
> > >   1 file changed, 1 insertion(+)
> > > 
> > > diff --git a/check b/check
> > > index 607d2456..8cdbb68f 100755
> > > --- a/check
> > > +++ b/check
> > > @@ -776,6 +776,7 @@ function run_section()
> > >   	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
> > >   		echo "RECREATING    -- $FSTYP on $TEST_DEV"
> > >   		_test_unmount 2> /dev/null
> > > +		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP
> > The _source_specific_fs is called when importing common/rc file:
> > 
> >    # check for correct setup and source the $FSTYP specific functions now
> >    _source_specific_fs $FSTYP
> > 
> >  From the code logic of check script:
> > 
> >          if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
> >                  echo "RECREATING    -- $FSTYP on $TEST_DEV"
> >                  _test_unmount 2> /dev/null
> >                  if ! _test_mkfs >$tmp.err 2>&1
> >                  then
> >                          echo "our local _test_mkfs routine ..."
> >                          cat $tmp.err
> >                          echo "check: failed to mkfs \$TEST_DEV using specified options"
> >                          status=1
> >                          exit
> >                  fi
> >                  if ! _test_mount
> >                  then
> >                          echo "check: failed to mount $TEST_DEV on $TEST_DIR"
> >                          status=1
> >                          exit
> >                  fi
> >                  # TEST_DEV has been recreated, previous FSTYP derived from
> >                  # TEST_DEV could be changed, source common/rc again with
> >                  # correct FSTYP to get FSTYP specific configs, e.g. common/xfs
> >                  . common/rc
> >                  ^^^^^^^^^^^
> > we import common/rc at here.
> > 
> > So I'm wondering if we can move this line upward, to fix the problem you
> > hit (and don't bring in regression :) Does that help?
> > 
> > Thanks,
> > Zorro
> 
> Okay so we can move ". common/rc" upward and then remove the following from
> "check" file:
> 
>         if ! _test_mount
>         then
>             echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>             status=1
>             exit
>         fi
> 
> since . common/rc will call init_rc() in the end, which does a
> _test_mount(). Do you agree with this (Zorro and Ritesh)?
> 
> I can make the changes and send a v2?

Hmm... the _init_rc doesn't do _test_mkfs, so you might need to do
". common/rc" after "_test_mkfs", rather than "_test_unmount".

By checking the _init_rc, I think it can replace the _test_mount you metioned
above. Some details might need more testing, to make sure we didn't miss
anything wrong:)

Any review points from others?

Thanks,
Zorro

> 
> --NR
> 
> > 
> > 
> > >   		if ! _test_mkfs >$tmp.err 2>&1
> > >   		then
> > >   			echo "our local _test_mkfs routine ..."
> > > -- 
> > > 2.34.1
> > > 
> > > 
> -- 
> Nirjhar Roy
> Linux Kernel Developer
> IBM, Bangalore
>
Ritesh Harjani (IBM) Jan. 13, 2025, 3:33 p.m. UTC | #6
Zorro Lang <zlang@redhat.com> writes:

> On Mon, Jan 13, 2025 at 02:22:20PM +0530, Nirjhar Roy (IBM) wrote:
>> 
>> On 1/13/25 11:29, Zorro Lang wrote:
>> > On Sun, Jan 12, 2025 at 03:21:51PM +0000, Nirjhar Roy (IBM) wrote:
>> > > Bug Description:
>> > > 
>> > > _test_mount function is failing with the following error:
>> > > ./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found
>> > > check: failed to mount /dev/loop0 on /mnt1/test
>> > > 
>> > > when the second section in local.config file is xfs and the first section
>> > > is non-xfs.
>> > > 
>> > > It can be easily reproduced with the following local.config file
>> > > 
>> > > [s2]
>> > > export FSTYP=ext4
>> > > export TEST_DEV=/dev/loop0
>> > > export TEST_DIR=/mnt1/test
>> > > export SCRATCH_DEV=/dev/loop1
>> > > export SCRATCH_MNT=/mnt1/scratch
>> > > 
>> > > [s1]
>> > > export FSTYP=xfs
>> > > export TEST_DEV=/dev/loop0
>> > > export TEST_DIR=/mnt1/test
>> > > export SCRATCH_DEV=/dev/loop1
>> > > export SCRATCH_MNT=/mnt1/scratch
>> > > 
>> > > ./check selftest/001
>> > > 
>> > > Root cause:
>> > > When _test_mount() is executed for the second section, the FSTYPE has
>> > > already changed but the new fs specific common/$FSTYP has not yet
>> > > been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
>> > > the test run fails.
>> > > 
>> > > Fix:
>> > > call _source_specific_fs $FSTYP at the correct call site of  _test_mount()
>> > > 
>> > > Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>> > > ---
>> > >   check | 1 +
>> > >   1 file changed, 1 insertion(+)
>> > > 
>> > > diff --git a/check b/check
>> > > index 607d2456..8cdbb68f 100755
>> > > --- a/check
>> > > +++ b/check
>> > > @@ -776,6 +776,7 @@ function run_section()
>> > >   	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>> > >   		echo "RECREATING    -- $FSTYP on $TEST_DEV"
>> > >   		_test_unmount 2> /dev/null
>> > > +		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP
>> > The _source_specific_fs is called when importing common/rc file:
>> > 
>> >    # check for correct setup and source the $FSTYP specific functions now
>> >    _source_specific_fs $FSTYP
>> > 
>> >  From the code logic of check script:
>> > 
>> >          if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>> >                  echo "RECREATING    -- $FSTYP on $TEST_DEV"
>> >                  _test_unmount 2> /dev/null
>> >                  if ! _test_mkfs >$tmp.err 2>&1
>> >                  then
>> >                          echo "our local _test_mkfs routine ..."
>> >                          cat $tmp.err
>> >                          echo "check: failed to mkfs \$TEST_DEV using specified options"
>> >                          status=1
>> >                          exit
>> >                  fi
>> >                  if ! _test_mount
>> >                  then
>> >                          echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>> >                          status=1
>> >                          exit
>> >                  fi
>> >                  # TEST_DEV has been recreated, previous FSTYP derived from
>> >                  # TEST_DEV could be changed, source common/rc again with
>> >                  # correct FSTYP to get FSTYP specific configs, e.g. common/xfs
>> >                  . common/rc
>> >                  ^^^^^^^^^^^
>> > we import common/rc at here.
>> > 
>> > So I'm wondering if we can move this line upward, to fix the problem you
>> > hit (and don't bring in regression :) Does that help?
>> > 
>> > Thanks,
>> > Zorro
>> 
>> Okay so we can move ". common/rc" upward and then remove the following from
>> "check" file:
>> 
>>         if ! _test_mount
>>         then
>>             echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>>             status=1
>>             exit
>>         fi
>> 
>> since . common/rc will call init_rc() in the end, which does a
>> _test_mount(). Do you agree with this (Zorro and Ritesh)?
>> 
>> I can make the changes and send a v2?
>
> Hmm... the _init_rc doesn't do _test_mkfs,

Yes, I had noticed that problem. So I felt sourcing fs specific file
before _test_mkfs should be ok.

> so you might need to do ". common/rc" after "_test_mkfs", rather than "_test_unmount".
>
> By checking the _init_rc, I think it can replace the _test_mount you metioned
> above. Some details might need more testing, to make sure we didn't miss
> anything wrong:)

If moving . common/rc above _test_mount works, than that is a better
approach than sourcing fs specific config file twice.


-ritesh

>
> Any review points from others?
>
> Thanks,
> Zorro
>
>> 
>> --NR
>> 
>> > 
>> > 
>> > >   		if ! _test_mkfs >$tmp.err 2>&1
>> > >   		then
>> > >   			echo "our local _test_mkfs routine ..."
>> > > -- 
>> > > 2.34.1
>> > > 
>> > > 
>> -- 
>> Nirjhar Roy
>> Linux Kernel Developer
>> IBM, Bangalore
>>
Ritesh Harjani (IBM) Jan. 13, 2025, 3:39 p.m. UTC | #7
"Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:

> On 1/13/25 01:11, Ritesh Harjani (IBM) wrote:
>> "Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:
>>
>>> Bug Description:
>>>
>>> _test_mount function is failing with the following error:
>>> ./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found

Please notice the error that you are seeing here ^^^ 

>>> check: failed to mount /dev/loop0 on /mnt1/test
>>>
>>> when the second section in local.config file is xfs and the first section
>>> is non-xfs.
>>>
>>> It can be easily reproduced with the following local.config file
>>>
>>> [s2]
>>> export FSTYP=ext4
>>> export TEST_DEV=/dev/loop0
>>> export TEST_DIR=/mnt1/test
>>> export SCRATCH_DEV=/dev/loop1
>>> export SCRATCH_MNT=/mnt1/scratch
>>>
>>> [s1]
>>> export FSTYP=xfs
>>> export TEST_DEV=/dev/loop0
>>> export TEST_DIR=/mnt1/test
>>> export SCRATCH_DEV=/dev/loop1
>>> export SCRATCH_MNT=/mnt1/scratch
>>>
>>> ./check selftest/001
>>>
>>> Root cause:
>>> When _test_mount() is executed for the second section, the FSTYPE has
>>> already changed but the new fs specific common/$FSTYP has not yet
>>> been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
>>> the test run fails.
>>>
>>> Fix:
>>> call _source_specific_fs $FSTYP at the correct call site of  _test_mount()
>> You should add the Fixes: tag too. Based on your description I guess
>> this should be the tag?
>>
>> Fixes: 1a49022fab9b4 ("fstests: always use fail-at-unmount semantics for XFS")

Please look into the above commit. The above patch introduced function
"_prepare_for_eio_shutdown()" in _test_mount(), which is what we are
getting the error for (for XFS i.e. _xfs_prepare_for_eio_shutdown()
command not found). Right? 

Ok, why don't revert the above commit and see if the revert fixes the
issue for you. 

https://www.kernel.org/doc/html/v4.10/process/submitting-patches.html#using-reported-by-tested-by-reviewed-by-suggested-by-and-fixes

-ritesh

>
> Shouldn't this be the following?
>
> commit f8e4f532f18d7517430d9849bfc042305d7f7f4d (HEAD)
> Author: Lukas Czerner <lczerner@redhat.com>
> Date:   Fri Apr 4 17:18:15 2014 +1100
>
>      check: Allow to recreate TEST_DEV
>
>      Add config option RECREATE_TEST_DEV to allow to recreate file system on
>      the TEST_DEV device. Permitted values are true and false.
>
>      If RECREATE_TEST_DEV is set to true the TEST_DEV device will be
>      unmounted and FSTYP file system will be created on it. Afterwards it
>      will be mounted to TEST_DIR again with the default, or specified mount
>      options.
>
>      Also recreate the file system if FSTYP differs from the previous
>      section.
>
>>
>> I agree with today the problem was in _test_mount(), tomorrow it could
>> be _test_mkfs, hence we could source the new FSTYP config file before
>> calling _test_mkfs().
>>
>> With the fixes tag added, please feel free to add:
>>
>> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
>>
>>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>>> ---
>>>   check | 1 +
>>>   1 file changed, 1 insertion(+)
>>>
>>> diff --git a/check b/check
>>> index 607d2456..8cdbb68f 100755
>>> --- a/check
>>> +++ b/check
>>> @@ -776,6 +776,7 @@ function run_section()
>>>   	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>>>   		echo "RECREATING    -- $FSTYP on $TEST_DEV"
>>>   		_test_unmount 2> /dev/null
>>> +		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP
>>>   		if ! _test_mkfs >$tmp.err 2>&1
>>>   		then
>>>   			echo "our local _test_mkfs routine ..."
>>> -- 
>>> 2.34.1
>
> -- 
> Nirjhar Roy
> Linux Kernel Developer
> IBM, Bangalore
Nirjhar Roy (IBM) Jan. 15, 2025, 5:06 a.m. UTC | #8
On 1/13/25 21:09, Ritesh Harjani (IBM) wrote:
> "Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:
>
>> On 1/13/25 01:11, Ritesh Harjani (IBM) wrote:
>>> "Nirjhar Roy (IBM)" <nirjhar.roy.lists@gmail.com> writes:
>>>
>>>> Bug Description:
>>>>
>>>> _test_mount function is failing with the following error:
>>>> ./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found
> Please notice the error that you are seeing here ^^^
>
>>>> check: failed to mount /dev/loop0 on /mnt1/test
>>>>
>>>> when the second section in local.config file is xfs and the first section
>>>> is non-xfs.
>>>>
>>>> It can be easily reproduced with the following local.config file
>>>>
>>>> [s2]
>>>> export FSTYP=ext4
>>>> export TEST_DEV=/dev/loop0
>>>> export TEST_DIR=/mnt1/test
>>>> export SCRATCH_DEV=/dev/loop1
>>>> export SCRATCH_MNT=/mnt1/scratch
>>>>
>>>> [s1]
>>>> export FSTYP=xfs
>>>> export TEST_DEV=/dev/loop0
>>>> export TEST_DIR=/mnt1/test
>>>> export SCRATCH_DEV=/dev/loop1
>>>> export SCRATCH_MNT=/mnt1/scratch
>>>>
>>>> ./check selftest/001
>>>>
>>>> Root cause:
>>>> When _test_mount() is executed for the second section, the FSTYPE has
>>>> already changed but the new fs specific common/$FSTYP has not yet
>>>> been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
>>>> the test run fails.
>>>>
>>>> Fix:
>>>> call _source_specific_fs $FSTYP at the correct call site of  _test_mount()
>>> You should add the Fixes: tag too. Based on your description I guess
>>> this should be the tag?
>>>
>>> Fixes: 1a49022fab9b4 ("fstests: always use fail-at-unmount semantics for XFS")
> Please look into the above commit. The above patch introduced function
> "_prepare_for_eio_shutdown()" in _test_mount(), which is what we are
> getting the error for (for XFS i.e. _xfs_prepare_for_eio_shutdown()
> command not found). Right?
Okay, now I got the logic. I was thinking of the commit that added the 
entire "if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ];" block 
(where the sourcing should have been there)
>
> Ok, why don't revert the above commit and see if the revert fixes the
> issue for you.
Yes, I can check that.
>
> https://www.kernel.org/doc/html/v4.10/process/submitting-patches.html#using-reported-by-tested-by-reviewed-by-suggested-by-and-fixes

Thanks, I will read this.

--NR

>
> -ritesh
>
>> Shouldn't this be the following?
>>
>> commit f8e4f532f18d7517430d9849bfc042305d7f7f4d (HEAD)
>> Author: Lukas Czerner <lczerner@redhat.com>
>> Date:   Fri Apr 4 17:18:15 2014 +1100
>>
>>       check: Allow to recreate TEST_DEV
>>
>>       Add config option RECREATE_TEST_DEV to allow to recreate file system on
>>       the TEST_DEV device. Permitted values are true and false.
>>
>>       If RECREATE_TEST_DEV is set to true the TEST_DEV device will be
>>       unmounted and FSTYP file system will be created on it. Afterwards it
>>       will be mounted to TEST_DIR again with the default, or specified mount
>>       options.
>>
>>       Also recreate the file system if FSTYP differs from the previous
>>       section.
>>
>>> I agree with today the problem was in _test_mount(), tomorrow it could
>>> be _test_mkfs, hence we could source the new FSTYP config file before
>>> calling _test_mkfs().
>>>
>>> With the fixes tag added, please feel free to add:
>>>
>>> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
>>>
>>>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>>>> ---
>>>>    check | 1 +
>>>>    1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/check b/check
>>>> index 607d2456..8cdbb68f 100755
>>>> --- a/check
>>>> +++ b/check
>>>> @@ -776,6 +776,7 @@ function run_section()
>>>>    	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>>>>    		echo "RECREATING    -- $FSTYP on $TEST_DEV"
>>>>    		_test_unmount 2> /dev/null
>>>> +		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP
>>>>    		if ! _test_mkfs >$tmp.err 2>&1
>>>>    		then
>>>>    			echo "our local _test_mkfs routine ..."
>>>> -- 
>>>> 2.34.1
>> -- 
>> Nirjhar Roy
>> Linux Kernel Developer
>> IBM, Bangalore
Nirjhar Roy (IBM) Jan. 15, 2025, 5:07 a.m. UTC | #9
On 1/13/25 18:41, Zorro Lang wrote:
> On Mon, Jan 13, 2025 at 02:22:20PM +0530, Nirjhar Roy (IBM) wrote:
>> On 1/13/25 11:29, Zorro Lang wrote:
>>> On Sun, Jan 12, 2025 at 03:21:51PM +0000, Nirjhar Roy (IBM) wrote:
>>>> Bug Description:
>>>>
>>>> _test_mount function is failing with the following error:
>>>> ./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found
>>>> check: failed to mount /dev/loop0 on /mnt1/test
>>>>
>>>> when the second section in local.config file is xfs and the first section
>>>> is non-xfs.
>>>>
>>>> It can be easily reproduced with the following local.config file
>>>>
>>>> [s2]
>>>> export FSTYP=ext4
>>>> export TEST_DEV=/dev/loop0
>>>> export TEST_DIR=/mnt1/test
>>>> export SCRATCH_DEV=/dev/loop1
>>>> export SCRATCH_MNT=/mnt1/scratch
>>>>
>>>> [s1]
>>>> export FSTYP=xfs
>>>> export TEST_DEV=/dev/loop0
>>>> export TEST_DIR=/mnt1/test
>>>> export SCRATCH_DEV=/dev/loop1
>>>> export SCRATCH_MNT=/mnt1/scratch
>>>>
>>>> ./check selftest/001
>>>>
>>>> Root cause:
>>>> When _test_mount() is executed for the second section, the FSTYPE has
>>>> already changed but the new fs specific common/$FSTYP has not yet
>>>> been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
>>>> the test run fails.
>>>>
>>>> Fix:
>>>> call _source_specific_fs $FSTYP at the correct call site of  _test_mount()
>>>>
>>>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>>>> ---
>>>>    check | 1 +
>>>>    1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/check b/check
>>>> index 607d2456..8cdbb68f 100755
>>>> --- a/check
>>>> +++ b/check
>>>> @@ -776,6 +776,7 @@ function run_section()
>>>>    	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>>>>    		echo "RECREATING    -- $FSTYP on $TEST_DEV"
>>>>    		_test_unmount 2> /dev/null
>>>> +		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP
>>> The _source_specific_fs is called when importing common/rc file:
>>>
>>>     # check for correct setup and source the $FSTYP specific functions now
>>>     _source_specific_fs $FSTYP
>>>
>>>   From the code logic of check script:
>>>
>>>           if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>>>                   echo "RECREATING    -- $FSTYP on $TEST_DEV"
>>>                   _test_unmount 2> /dev/null
>>>                   if ! _test_mkfs >$tmp.err 2>&1
>>>                   then
>>>                           echo "our local _test_mkfs routine ..."
>>>                           cat $tmp.err
>>>                           echo "check: failed to mkfs \$TEST_DEV using specified options"
>>>                           status=1
>>>                           exit
>>>                   fi
>>>                   if ! _test_mount
>>>                   then
>>>                           echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>>>                           status=1
>>>                           exit
>>>                   fi
>>>                   # TEST_DEV has been recreated, previous FSTYP derived from
>>>                   # TEST_DEV could be changed, source common/rc again with
>>>                   # correct FSTYP to get FSTYP specific configs, e.g. common/xfs
>>>                   . common/rc
>>>                   ^^^^^^^^^^^
>>> we import common/rc at here.
>>>
>>> So I'm wondering if we can move this line upward, to fix the problem you
>>> hit (and don't bring in regression :) Does that help?
>>>
>>> Thanks,
>>> Zorro
>> Okay so we can move ". common/rc" upward and then remove the following from
>> "check" file:
>>
>>          if ! _test_mount
>>          then
>>              echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>>              status=1
>>              exit
>>          fi
>>
>> since . common/rc will call init_rc() in the end, which does a
>> _test_mount(). Do you agree with this (Zorro and Ritesh)?
>>
>> I can make the changes and send a v2?
> Hmm... the _init_rc doesn't do _test_mkfs, so you might need to do
> ". common/rc" after "_test_mkfs", rather than "_test_unmount".
Yes, we should place ". common/rc" after, _test_mkfs.
>
> By checking the _init_rc, I think it can replace the _test_mount you metioned
> above. Some details might need more testing, to make sure we didn't miss
> anything wrong:)
Yes, makes sense.
>
> Any review points from others?
>
> Thanks,
> Zorro
>
>> --NR
>>
>>>
>>>>    		if ! _test_mkfs >$tmp.err 2>&1
>>>>    		then
>>>>    			echo "our local _test_mkfs routine ..."
>>>> -- 
>>>> 2.34.1
>>>>
>>>>
>> -- 
>> Nirjhar Roy
>> Linux Kernel Developer
>> IBM, Bangalore
>>
Nirjhar Roy (IBM) Jan. 15, 2025, 5:10 a.m. UTC | #10
On 1/13/25 21:03, Ritesh Harjani (IBM) wrote:
> Zorro Lang <zlang@redhat.com> writes:
>
>> On Mon, Jan 13, 2025 at 02:22:20PM +0530, Nirjhar Roy (IBM) wrote:
>>> On 1/13/25 11:29, Zorro Lang wrote:
>>>> On Sun, Jan 12, 2025 at 03:21:51PM +0000, Nirjhar Roy (IBM) wrote:
>>>>> Bug Description:
>>>>>
>>>>> _test_mount function is failing with the following error:
>>>>> ./common/rc: line 4716: _xfs_prepare_for_eio_shutdown: command not found
>>>>> check: failed to mount /dev/loop0 on /mnt1/test
>>>>>
>>>>> when the second section in local.config file is xfs and the first section
>>>>> is non-xfs.
>>>>>
>>>>> It can be easily reproduced with the following local.config file
>>>>>
>>>>> [s2]
>>>>> export FSTYP=ext4
>>>>> export TEST_DEV=/dev/loop0
>>>>> export TEST_DIR=/mnt1/test
>>>>> export SCRATCH_DEV=/dev/loop1
>>>>> export SCRATCH_MNT=/mnt1/scratch
>>>>>
>>>>> [s1]
>>>>> export FSTYP=xfs
>>>>> export TEST_DEV=/dev/loop0
>>>>> export TEST_DIR=/mnt1/test
>>>>> export SCRATCH_DEV=/dev/loop1
>>>>> export SCRATCH_MNT=/mnt1/scratch
>>>>>
>>>>> ./check selftest/001
>>>>>
>>>>> Root cause:
>>>>> When _test_mount() is executed for the second section, the FSTYPE has
>>>>> already changed but the new fs specific common/$FSTYP has not yet
>>>>> been done. Hence _xfs_prepare_for_eio_shutdown() is not found and
>>>>> the test run fails.
>>>>>
>>>>> Fix:
>>>>> call _source_specific_fs $FSTYP at the correct call site of  _test_mount()
>>>>>
>>>>> Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
>>>>> ---
>>>>>    check | 1 +
>>>>>    1 file changed, 1 insertion(+)
>>>>>
>>>>> diff --git a/check b/check
>>>>> index 607d2456..8cdbb68f 100755
>>>>> --- a/check
>>>>> +++ b/check
>>>>> @@ -776,6 +776,7 @@ function run_section()
>>>>>    	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>>>>>    		echo "RECREATING    -- $FSTYP on $TEST_DEV"
>>>>>    		_test_unmount 2> /dev/null
>>>>> +		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP
>>>> The _source_specific_fs is called when importing common/rc file:
>>>>
>>>>     # check for correct setup and source the $FSTYP specific functions now
>>>>     _source_specific_fs $FSTYP
>>>>
>>>>   From the code logic of check script:
>>>>
>>>>           if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
>>>>                   echo "RECREATING    -- $FSTYP on $TEST_DEV"
>>>>                   _test_unmount 2> /dev/null
>>>>                   if ! _test_mkfs >$tmp.err 2>&1
>>>>                   then
>>>>                           echo "our local _test_mkfs routine ..."
>>>>                           cat $tmp.err
>>>>                           echo "check: failed to mkfs \$TEST_DEV using specified options"
>>>>                           status=1
>>>>                           exit
>>>>                   fi
>>>>                   if ! _test_mount
>>>>                   then
>>>>                           echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>>>>                           status=1
>>>>                           exit
>>>>                   fi
>>>>                   # TEST_DEV has been recreated, previous FSTYP derived from
>>>>                   # TEST_DEV could be changed, source common/rc again with
>>>>                   # correct FSTYP to get FSTYP specific configs, e.g. common/xfs
>>>>                   . common/rc
>>>>                   ^^^^^^^^^^^
>>>> we import common/rc at here.
>>>>
>>>> So I'm wondering if we can move this line upward, to fix the problem you
>>>> hit (and don't bring in regression :) Does that help?
>>>>
>>>> Thanks,
>>>> Zorro
>>> Okay so we can move ". common/rc" upward and then remove the following from
>>> "check" file:
>>>
>>>          if ! _test_mount
>>>          then
>>>              echo "check: failed to mount $TEST_DEV on $TEST_DIR"
>>>              status=1
>>>              exit
>>>          fi
>>>
>>> since . common/rc will call init_rc() in the end, which does a
>>> _test_mount(). Do you agree with this (Zorro and Ritesh)?
>>>
>>> I can make the changes and send a v2?
>> Hmm... the _init_rc doesn't do _test_mkfs,
> Yes, I had noticed that problem. So I felt sourcing fs specific file
> before _test_mkfs should be ok.
>
>> so you might need to do ". common/rc" after "_test_mkfs", rather than "_test_unmount".
>>
>> By checking the _init_rc, I think it can replace the _test_mount you metioned
>> above. Some details might need more testing, to make sure we didn't miss
>> anything wrong:)
> If moving . common/rc above _test_mount works, than that is a better
> approach than sourcing fs specific config file twice.

Yes, moving the ". common/rc" just after _test_mkfs and removing the 
_test_mount after fixes it the issue. I will do additional testing 
before sending a v2.

--NR

>
>
> -ritesh
>
>> Any review points from others?
>>
>> Thanks,
>> Zorro
>>
>>> --NR
>>>
>>>>
>>>>>    		if ! _test_mkfs >$tmp.err 2>&1
>>>>>    		then
>>>>>    			echo "our local _test_mkfs routine ..."
>>>>> -- 
>>>>> 2.34.1
>>>>>
>>>>>
>>> -- 
>>> Nirjhar Roy
>>> Linux Kernel Developer
>>> IBM, Bangalore
>>>
diff mbox series

Patch

diff --git a/check b/check
index 607d2456..8cdbb68f 100755
--- a/check
+++ b/check
@@ -776,6 +776,7 @@  function run_section()
 	if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
 		echo "RECREATING    -- $FSTYP on $TEST_DEV"
 		_test_unmount 2> /dev/null
+		[[ "$OLD_FSTYP" != "$FSTYP" ]] && _source_specific_fs $FSTYP
 		if ! _test_mkfs >$tmp.err 2>&1
 		then
 			echo "our local _test_mkfs routine ..."