Hi all,
The purpose of this series is to help address the inefficient use of
preallocation for larger files on smaller filesystems. When the
filesystem is small, so is the 5% low free space threshold that enables
preallocation throttling. When the low free space threshold is reduced
to a couple GB or so, we can ram into ENOSPC prematurely due to larger,
active preallocations.
We resolve this condition with an eofblocks scan in the pre-existing
ENOSPC retry write sequence. The scan resets outstanding preallocations
such that throttling is guaranteed an opportunity to manage future
preallocations gracefully into ENOSPC and thus ensures closer to 100%
utilization before ENOSPC is reported to userspace.
Patches 1-3 make some small enhancements to the eofblocks scanner that
facilitate running a scan in the context of a write. Patch 4 adds the
actual scan-on-ENOSPC policy. Patch 5 updates the preallocation
throttling algorithm to take quota free space into account.
Thoughts, reviews, flames appreciated.
Brian
Brian Foster (5):
xfs: do eofb filtering before dirty check
xfs: add flush flag to xfs_eofblocks
xfs: add scan owner field to xfs_eofblocks
xfs: run an eofblocks scan on ENOSPC/EDQUOT
xfs: squash prealloc while over quota free space as well
fs/xfs/xfs_dquot.h | 15 +++++++++
fs/xfs/xfs_file.c | 32 +++++++++++++++++--
fs/xfs/xfs_fs.h | 4 ++-
fs/xfs/xfs_icache.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++------
fs/xfs/xfs_icache.h | 3 ++
fs/xfs/xfs_iomap.c | 20 ++++++++----
6 files changed, 145 insertions(+), 19 deletions(-)
--
1.8.3.1
|