On Thu, Apr 25, 2019 at 3:28 PM Qu Wenruo <quwenruo.bt...@gmx.com> wrote:
>
>
>
> On 2019/4/25 下午10:09, Josef Bacik wrote:
> > On Thu, Apr 25, 2019 at 09:50:25PM +0800, Qu Wenruo wrote:
> >>
> >>
> >> On 2019/4/25 下午9:25, Josef Bacik wrote:
> >> [snip]
> >>>>>
> >>>>> What if the commit is reverted, if the problem is otherwise hard to fix?
> >>>>> This seems to break the semantics of fallocate so the performance should
> >>>>> not the main concern here.
> >>>>
> >>>
> >>> Are we sure the ENOSPC is coming from the data reservation?  That change 
> >>> makes
> >>> us fall back on the old behavior, which means we should still succeed at 
> >>> making
> >>> the data reservation.
> >>>
> >>> However it fallocate() _does not_ guarantee you won't fail the metadata
> >>> reservation, I suspect that may be what you are running into.
> >>
> >> For this script, we only needs 4 file extents at most.
> >> Even the initial 8M metadata should be pretty enough, thus I don't think
> >> it's metadata causing the problem.
> >> ---
> >> #!/bin/bash
> >>
> >> dev=/dev/test/test
> >> mnt=/mnt/btrfs
> >>
> >> mkfs.btrfs -f $dev -b 512M
> >>
> >> mount $dev $mnt
> >>
> >> fallocate -l 384M $mnt/file1
> >> echo "fallocate success"
> >> sync
> >> dd if=/dev/zero bs=512K  oflag=direct conv=notrunc count=768 of=$mnt/file2
> >>
> >
> > Wellll we don't do the nocow check _at all_ for O_DIRECT, so mystery solved
> > there.
>
> Oh, wrong flag, remove that oflag and we still get the same problem.
>
> fallocate success
> dd: error writing '/mnt/btrfs/file2': No space left on device

I don't get it. Why is this unexpected error?
You created a fs with 512Mb, fallocated 384Mb for a file named file1,
and then tried to write 384Mb 512K * 768 to a file named file2 (i.e. a
different file).
Wasn't the test supposed to write to file1 instead?

> 95+0 records in
> 94+0 records out
> 49283072 bytes (49 MB, 47 MiB) copied, 0.0807034 s, 611 MB/s
>
> Thanks,
> Qu
>
> >
> > Josef
> >
>


-- 
Filipe David Manana,

“Whether you think you can, or you think you can't — you're right.”

Reply via email to