Re: [PATCH] generic/520: use fsync instead of sync during clean_dir

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Wed, Dec 18, 2019 at 10:37:51AM +0800, Yang Xu wrote:
> 
> 
> on 2019/12/18 6:36, Darrick J. Wong wrote:
> > On Mon, Dec 16, 2019 at 02:24:56PM +0800, Yang Xu wrote:
> > > 
> > > 
> > > on 2019/12/14 4:42, Darrick J. Wong wrote:
> > > > On Fri, Dec 13, 2019 at 01:45:41PM +0800, Yang Xu wrote:
> > > > > When I test this case on xfs, it may fail as below:
> > > > > --------------------------------------------
> > > > >    === link SCRATCH_MNT/A/foo SCRATCH_MNT/bar  with fsync SCRATCH_MNT/A ===
> > > > > +umount: /mnt/xfstests/scratch: target is busy.
> > > > > +        (In some cases useful info about processes that use
> > > > > +         the device is found by lsof(8) or fuser(1))
> > > > > ---------------------------------------------
> > > > > 
> > > > > I think we don't need to sync all fs and fsync SCRATCH_MNT is enough.
> > > > > 
> > > > > Signed-off-by: Yang Xu <xuyang2018.jy@xxxxxxxxxxxxxx>
> > > > > ---
> > > > >    tests/generic/520 | 2 +-
> > > > >    1 file changed, 1 insertion(+), 1 deletion(-)
> > > > > 
> > > > > diff --git a/tests/generic/520 b/tests/generic/520
> > > > > index 167d7077..a16467ca 100755
> > > > > --- a/tests/generic/520
> > > > > +++ b/tests/generic/520
> > > > > @@ -58,7 +58,7 @@ clean_dir()
> > > > >    {
> > > > >    	_mount_flakey
> > > > >    	rm -rf $(find $SCRATCH_MNT/* | grep -v "lost+found")
> > > > > -	sync
> > > > > +	$XFS_IO_PROG -c "fsync" $SCRATCH_MNT
> > > > 
> > > > But that only has to force the scratch mount directory to disk.
> > > > 
> > > > Assuming the test authors really meant "write all of the scratch fs'
> > > > dirty data/metadata to disk", I think you want:
> > > > 
> > > >    $XFS_IO_PROG -c syncfs $SCRATCH_MNT
> > > > 
> > > > here?
> > > My xfsprogs version doesn't support syncfs command. Or, we can use fsync to
> > > make four files(foo bar A/foo A/bar) write to disk?
> > 
> > Hmm, 'sync -f $SCRATCH_MNT' then?
> Both syncfs and sync -f are all useful when I test on 4.18.0-147.el8.x86_64.
> But on old system (3.10.0-1101.el7.x86_64
> ), sync command doesn't support -f option.  Or, I think we should use a
> generic way to avoid busy error. IMHO, it has two ways(mkfs and fsync), but
> mkfs will add more test time. What do you think about it?

Ahh, ok.  I guess fsyncing the four things is fine then.

> > > > Also, why did umount spit out 'target is busy' here?  clean_dir() erases
> > > > the scratch fs between tests, there shouldn't be anything flakey about
> > > > that.
> > > I try to find the cause of this but fail. I debug it but no useful
> > > output(using  _unmount_flakey  || fuser -uvm $SCRATCH_MNT ), failed as
> > > below:
> > > umount: /mnt/xfstests/scratch: target is busy.
> > >          (In some cases useful info about processes that use
> > >           the device is found by lsof(8) or fuser(1))
> > >                       USER        PID ACCESS COMMAND
> > > /mnt/xfstests/scratch:
> > >                       root     kernel mount (root)/mnt/xfstests/scratch
> > > 
> > > ps: My test machine only excutes this cases and doesn't do other  things.
> > 
> > Does a second umount attempt succeed after the fuser fails to find
> > anything sitting on the mount?
> Yes, second umount succeed.

Also, which kernel behaves like this?  Does it happen with upstream?
AFAICT when running this in a loop on 5.5-rc2 it doesn't exhibit this
failure, but maybe another kernel does?

--D

> > --D
> > 
> > > > 
> > > > --D
> > > > 
> > > > >    	_unmount_flakey
> > > > >    }
> > > > > -- 
> > > > > 2.18.0
> > > > > 
> > > > > 
> > > > > 
> > > > 
> > > > 
> > > 
> > > 
> > 
> > 
> 
> 



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux