On 2017-08-03 07:44, Marat Khalili wrote:
On 02/08/17 20:52, Goffredo Baroncelli wrote:
consider the following scenario:
a) create a 2GB file
b) fallocate -o 1GB -l 2GB
c) write from 1GB to 3GB
after b), the expectation is that c) always succeed [1]: i.e. there is
enough space on the filesystem. Due to the COW nature of BTRFS, you
cannot rely on the already allocated space because there could be a
small time window where both the old and the new data exists on the disk.
Just curious. With current implementation, in the following case:
a) create a 2GB file1 && create a 2GB file2
b) fallocate -o 1GB -l 2GB file1 && fallocate -o 1GB -l 2GB file2
c) write from 1GB to 3GB file1 && write from 1GB to 3GB file2
will (c) always succeed? I.e. does fallocate really allocate 2GB per
file, or does it only allocate additional 1GB and check free space for
another 1GB? If it's only the latter, it is useless.
It will currently allocate 4GB total in this case (2 for each file), and
_should_ succeed. I think there are corner cases where it can fail
though because of metadata exhaustion, and I'm still not certain we
don't CoW unwritten extents (if we do CoW unwritten extents, then this,
and all fallocate allocation for that matter, becomes non-deterministic
as to whether or not it succeeds).
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html