Here's v3 of the eofblocks scan on ENOSPC series. The primary change is
the insertion of patch 2, which implements a union inode filter for
eofblocks scans. This facilitates the EDQUOT handling in patch 3 to
cover multiple quotas with a single scan. Version 2 and associated
feedback is available here:
There was also some discussion about dropping the iolock in favor of
introducing the scan owner field, but it's not clear if that is totally
safe. FWIW, the scan owner field is kernel only, so can be removed and
replaced with smarter locking any time down the road. Thoughts, reviews,
- Removed NULLFSINO check in eofblocks scan owner logic, added ASSERT.
- Added union-based eofblocks scan filter patch and use in quota ENOSPC
- Drop flush mechanism during eofblocks scan (along with prereq patch).
- Simplify scan logic on ENOSPC. Separate EDQUOT from ENOSPC and tie
ENOSPC scan to inode flush.
- Eliminate unnecessary project quota handling from
xfs_inode_free_quota_eofblocks() (ENOSPC is a separate path).
Brian Foster (4):
xfs: add scan owner field to xfs_eofblocks
xfs: support a union-based filter for eofblocks scans
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 | 23 ++++++++++---
fs/xfs/xfs_fs.h | 3 ++
fs/xfs/xfs_icache.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++--
fs/xfs/xfs_icache.h | 3 ++
fs/xfs/xfs_iomap.c | 20 +++++++----
6 files changed, 148 insertions(+), 12 deletions(-)