Ext4 can make gross overestimates of the number of reserved clusters required to handle bigalloc write requests under delayed allocation, resulting in premature ENOSPC and quota limit failures. These patches fix the implementation of reserved cluster accounting for bigalloc file systems configured to use delayed allocation, and fix the specific bugs described in bugzilla #151491. These patches also supersede a previous RFC posting from May 2018 ("ext4: rework delayed allocated cluster accounting"). Eric Whitney (6): ext4: generalize extents status tree search functions ext4: add new pending reservation mechanism ext4: fix reserved cluster accounting at delayed write time ext4: reduce reserved cluster count by number of allocated clusters ext4: adjust reserved cluster count when removing extents ext4: fix reserved cluster accounting at page invalidation time fs/ext4/ext4.h | 10 +- fs/ext4/ext4_extents.h | 13 + fs/ext4/extents.c | 602 ++++++++++++++++++++-------------------- fs/ext4/extents_status.c | 662 ++++++++++++++++++++++++++++++++++++++++++-- fs/ext4/extents_status.h | 85 +++++- fs/ext4/inode.c | 104 ++++--- fs/ext4/mballoc.c | 14 +- fs/ext4/super.c | 8 + include/trace/events/ext4.h | 99 +++++-- 9 files changed, 1199 insertions(+), 398 deletions(-) -- 2.11.0