summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2015-10-10 17:59:53 +0200
committerDavid Sterba <dsterba@suse.com>2016-01-07 15:20:55 +0100
commitca8a51b3a979d57b082b14eda38602b7f52d81d1 (patch)
treeaf4996eef9554daebf44cb75c25485d17c0d7c50 /Makefile
parentbtrfs: preallocate path for snapshot creation at ioctl time (diff)
downloadlinux-ca8a51b3a979d57b082b14eda38602b7f52d81d1.tar.xz
linux-ca8a51b3a979d57b082b14eda38602b7f52d81d1.zip
btrfs: statfs: report zero available if metadata are exhausted
There is one ENOSPC case that's very confusing. There's Available greater than zero but no file operation succeds (besides removing files). This happens when the metadata are exhausted and there's no possibility to allocate another chunk. In this scenario it's normal that there's still some space in the data chunk and the calculation in df reflects that in the Avail value. To at least give some clue about the ENOSPC situation, let statfs report zero value in Avail, even if there's still data space available. Current: /dev/sdb1 4.0G 3.3G 719M 83% /mnt/test New: /dev/sdb1 4.0G 3.3G 0 100% /mnt/test We calculate the remaining metadata space minus global reserve. If this is (supposedly) smaller than zero, there's no space. But this does not hold in practice, the exhausted state happens where's still some positive delta. So we apply some guesswork and compare the delta to a 4M threshold. (Practically observed delta was 2M.) We probably cannot calculate the exact threshold value because this depends on the internal reservations requested by various operations, so some operations that consume a few metadata will succeed even if the Avail is zero. But this is better than the other way around. Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'Makefile')
0 files changed, 0 insertions, 0 deletions