generic/442: add sync before dmsetup remove
diff mbox series

Message ID 1569400158-5297-1-git-send-email-suyj.fnst@cn.fujitsu.com
State New
Headers show
Series
  • generic/442: add sync before dmsetup remove
Related show

Commit Message

Su Yanjun Sept. 25, 2019, 8:29 a.m. UTC
This test case sometime fails. Because "dmsetup remove error-test" may
fail when some writeback is going on.

This patch adds sync before dmsetup remove operation.

Signed-off-by: Su Yanjun <suyj.fnst@cn.fujitsu.com>
---
 tests/generic/442 | 1 +
 1 file changed, 1 insertion(+)

Comments

Eryu Guan Sept. 25, 2019, 1:08 p.m. UTC | #1
On Wed, Sep 25, 2019 at 04:29:18PM +0800, Su Yanjun wrote:
> This test case sometime fails. Because "dmsetup remove error-test" may
> fail when some writeback is going on.
> 
> This patch adds sync before dmsetup remove operation.
> 
> Signed-off-by: Su Yanjun <suyj.fnst@cn.fujitsu.com>
> ---
>  tests/generic/442 | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/tests/generic/442 b/tests/generic/442
> index fe6d460..d48ca36 100755
> --- a/tests/generic/442
> +++ b/tests/generic/442
> @@ -43,6 +43,7 @@ $here/src/fsync-err -d $here/src/dmerror $DMERROR_DEV

fsync-err should have flipped $DMERROR_DEV to working mode and fsync
each open fd before exit if fsync-err didn't report any failure. So
there should be no on-going writeback.

>  
>  # success, all done
>  _dmerror_load_working_table
> +sync
>  _dmerror_cleanup

And _dmerror_cleanup umount $DMERROR_DEV first, then tear down the dm
device. Could you check if fsync-err returns successfully and umount
succeeds as well?

Thanks,
Eryu

>  _scratch_mkfs > $seqres.full 2>&1
>  status=0
> -- 
> 2.7.4
> 
> 
>
Su Yanjun Sept. 26, 2019, 3:05 a.m. UTC | #2
在 2019/9/25 21:08, Eryu Guan 写道:
> On Wed, Sep 25, 2019 at 04:29:18PM +0800, Su Yanjun wrote:
>> This test case sometime fails. Because "dmsetup remove error-test" may
>> fail when some writeback is going on.
>>
>> This patch adds sync before dmsetup remove operation.
>>
>> Signed-off-by: Su Yanjun <suyj.fnst@cn.fujitsu.com>
>> ---
>>   tests/generic/442 | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/tests/generic/442 b/tests/generic/442
>> index fe6d460..d48ca36 100755
>> --- a/tests/generic/442
>> +++ b/tests/generic/442
>> @@ -43,6 +43,7 @@ $here/src/fsync-err -d $here/src/dmerror $DMERROR_DEV
> fsync-err should have flipped $DMERROR_DEV to working mode and fsync
> each open fd before exit if fsync-err didn't report any failure. So
> there should be no on-going writeback.
>>   
>>   # success, all done
>>   _dmerror_load_working_table
>> +sync
>>   _dmerror_cleanup
> And _dmerror_cleanup umount $DMERROR_DEV first, then tear down the dm
> device. Could you check if fsync-err returns successfully and umount
> succeeds as well?

I cant find any mount info for $DMERROR_DEV in this test. fsync-err  
just does write or sync test with the raw logical dm device.

Am i missing something?

mkfs.xfs: cannot open /dev/sda11: Device or resource busy
device-mapper: remove ioctl on error-test  failed: Device or resource busy
Command failed.
_check_xfs_filesystem: filesystem on /dev/sda11 has dirty log
*** xfs_logprint -t output ***
xfs_logprint: logprint.c:230: main: Assertion `x.logBBsize <= 
0x7fffffff' failed.
*** end xfs_logprint output

 From above log, dmsetup remove failed with "Device or resource busy".

> Thanks,
> Eryu
>
>>   _scratch_mkfs > $seqres.full 2>&1
>>   status=0
>> -- 
>> 2.7.4
>>
>>
>>
>
Eryu Guan Sept. 26, 2019, 5:51 a.m. UTC | #3
On Thu, Sep 26, 2019 at 11:05:13AM +0800, Su Yanjun wrote:
> 
> 在 2019/9/25 21:08, Eryu Guan 写道:
> > On Wed, Sep 25, 2019 at 04:29:18PM +0800, Su Yanjun wrote:
> > > This test case sometime fails. Because "dmsetup remove error-test" may
> > > fail when some writeback is going on.
> > > 
> > > This patch adds sync before dmsetup remove operation.
> > > 
> > > Signed-off-by: Su Yanjun <suyj.fnst@cn.fujitsu.com>
> > > ---
> > >   tests/generic/442 | 1 +
> > >   1 file changed, 1 insertion(+)
> > > 
> > > diff --git a/tests/generic/442 b/tests/generic/442
> > > index fe6d460..d48ca36 100755
> > > --- a/tests/generic/442
> > > +++ b/tests/generic/442
> > > @@ -43,6 +43,7 @@ $here/src/fsync-err -d $here/src/dmerror $DMERROR_DEV
> > fsync-err should have flipped $DMERROR_DEV to working mode and fsync
> > each open fd before exit if fsync-err didn't report any failure. So
> > there should be no on-going writeback.
> > >   # success, all done
> > >   _dmerror_load_working_table
> > > +sync
> > >   _dmerror_cleanup
> > And _dmerror_cleanup umount $DMERROR_DEV first, then tear down the dm
> > device. Could you check if fsync-err returns successfully and umount
> > succeeds as well?
> 
> I cant find any mount info for $DMERROR_DEV in this test. fsync-err  just
> does write or sync test with the raw logical dm device.
> 
> Am i missing something?

Ah, sorry, I missed that the test uses raw block device..

> 
> mkfs.xfs: cannot open /dev/sda11: Device or resource busy
> device-mapper: remove ioctl on error-test  failed: Device or resource busy
> Command failed.
> _check_xfs_filesystem: filesystem on /dev/sda11 has dirty log
> *** xfs_logprint -t output ***
> xfs_logprint: logprint.c:230: main: Assertion `x.logBBsize <= 0x7fffffff'
> failed.
> *** end xfs_logprint output
> 
> From above log, dmsetup remove failed with "Device or resource busy".

I can't reproduce above failure with v5.3 kernel, neither xfs nor ext4.
Does ext4 pass in your setup? I suspect it's a kernel bug that still
holds the block device.

Thanks,
Eryu
Su Yanjun Sept. 27, 2019, 1:40 a.m. UTC | #4
在 2019/9/26 13:51, Eryu Guan 写道:
> On Thu, Sep 26, 2019 at 11:05:13AM +0800, Su Yanjun wrote:
>> 在 2019/9/25 21:08, Eryu Guan 写道:
>>> On Wed, Sep 25, 2019 at 04:29:18PM +0800, Su Yanjun wrote:
>>>> This test case sometime fails. Because "dmsetup remove error-test" may
>>>> fail when some writeback is going on.
>>>>
>>>> This patch adds sync before dmsetup remove operation.
>>>>
>>>> Signed-off-by: Su Yanjun<suyj.fnst@cn.fujitsu.com>
>>>> ---
>>>>    tests/generic/442 | 1 +
>>>>    1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/tests/generic/442 b/tests/generic/442
>>>> index fe6d460..d48ca36 100755
>>>> --- a/tests/generic/442
>>>> +++ b/tests/generic/442
>>>> @@ -43,6 +43,7 @@ $here/src/fsync-err -d $here/src/dmerror $DMERROR_DEV
>>> fsync-err should have flipped $DMERROR_DEV to working mode and fsync
>>> each open fd before exit if fsync-err didn't report any failure. So
>>> there should be no on-going writeback.
>>>>    # success, all done
>>>>    _dmerror_load_working_table
>>>> +sync
>>>>    _dmerror_cleanup
>>> And _dmerror_cleanup umount $DMERROR_DEV first, then tear down the dm
>>> device. Could you check if fsync-err returns successfully and umount
>>> succeeds as well?
>> I cant find any mount info for $DMERROR_DEV in this test. fsync-err  just
>> does write or sync test with the raw logical dm device.
>>
>> Am i missing something?
> Ah, sorry, I missed that the test uses raw block device..
>
>> mkfs.xfs: cannot open /dev/sda11: Device or resource busy
>> device-mapper: remove ioctl on error-test  failed: Device or resource busy
>> Command failed.
>> _check_xfs_filesystem: filesystem on /dev/sda11 has dirty log
>> *** xfs_logprint -t output ***
>> xfs_logprint: logprint.c:230: main: Assertion `x.logBBsize <= 0x7fffffff'
>> failed.
>> *** end xfs_logprint output
>>
>>  From above log, dmsetup remove failed with "Device or resource busy".
> I can't reproduce above failure with v5.3 kernel, neither xfs nor ext4.
> Does ext4 pass in your setup? I suspect it's a kernel bug that still
> holds the block device.

Yes, ext4 can pass. Only in RHEL release it tests failed.

Maybe "sync" is only a workaround for the the case, the root cause is 
unknown.

It may need more time to analysis.

Thanks

> Thanks,
> Eryu
>
>

Patch
diff mbox series

diff --git a/tests/generic/442 b/tests/generic/442
index fe6d460..d48ca36 100755
--- a/tests/generic/442
+++ b/tests/generic/442
@@ -43,6 +43,7 @@  $here/src/fsync-err -d $here/src/dmerror $DMERROR_DEV
 
 # success, all done
 _dmerror_load_working_table
+sync
 _dmerror_cleanup
 _scratch_mkfs > $seqres.full 2>&1
 status=0