linux/fs/ext4
Theodore Ts'o 9d0be50230 ext4: Calculate metadata requirements more accurately
In the past, ext4_calc_metadata_amount(), and its sub-functions
ext4_ext_calc_metadata_amount() and ext4_indirect_calc_metadata_amount()
badly over-estimated the number of metadata blocks that might be
required for delayed allocation blocks.  This didn't matter as much
when functions which managed the reserved metadata blocks were more
aggressive about dropping reserved metadata blocks as delayed
allocation blocks were written, but unfortunately they were too
aggressive.  This was fixed in commit 0637c6f, but as a result the
over-estimation by ext4_calc_metadata_amount() would lead to reserving
2-3 times the number of pending delayed allocation blocks as
potentially required metadata blocks.  So if there are 1 megabytes of
blocks which have been not yet been allocation, up to 3 megabytes of
space would get reserved out of the user's quota and from the file
system free space pool until all of the inode's data blocks have been
allocated.

This commit addresses this problem by much more accurately estimating
the number of metadata blocks that will be required.  It will still
somewhat over-estimate the number of blocks needed, since it must make
a worst case estimate not knowing which physical blocks will be
needed, but it is much more accurate than before.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2010-01-01 02:41:30 -05:00
..
acl.c sanitize xattr handler prototypes 2009-12-16 12:16:49 -05:00
acl.h ext[234]: move over to 'check_acl' permission model 2009-09-08 11:09:04 -07:00
balloc.c ext4: fold ext4_free_blocks() and ext4_mb_free_blocks() 2009-11-22 07:44:56 -05:00
bitmap.c ext4: Change unsigned long to unsigned int 2008-11-05 00:14:04 -05:00
block_validity.c ext4: remove unused #include <linux/version.h> 2009-12-14 09:24:20 -05:00
dir.c ext4: Define a new set of flags for ext4_get_blocks() 2009-05-14 00:58:52 -04:00
ext4_extents.h ext4: Calculate metadata requirements more accurately 2010-01-01 02:41:30 -05:00
ext4_jbd2.c ext4: fold ext4_journal_forget() into ext4_forget() 2009-11-22 21:00:13 -05:00
ext4_jbd2.h ext4: Wait for proper transaction commit on fsync 2009-12-08 23:51:10 -05:00
ext4.h ext4: Calculate metadata requirements more accurately 2010-01-01 02:41:30 -05:00
extents.c ext4: Calculate metadata requirements more accurately 2010-01-01 02:41:30 -05:00
file.c const: mark struct vm_struct_operations 2009-09-27 11:39:25 -07:00
fsync.c ext4, jbd2: Add barriers for file systems with exernal journals 2009-12-23 06:52:08 -05:00
hash.c ext4: Add support for non-native signed/unsigned htree hash algorithms 2008-10-28 13:21:44 -04:00
ialloc.c ext4: fix build warning when EXT4FS_DEBUG is on 2009-07-27 21:44:40 -04:00
inode.c ext4: Calculate metadata requirements more accurately 2010-01-01 02:41:30 -05:00
ioctl.c ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT 2009-12-06 23:38:31 -05:00
Kconfig ext4: Don't ask about supporting ext2/3 in ext4 if ext4 is not configured 2009-12-21 10:54:09 -05:00
Makefile ext4: online defrag -- Add EXT4_IOC_MOVE_EXT ioctl 2009-06-17 19:24:03 -04:00
mballoc.c ext4: Fix potential quota deadlock 2009-12-23 13:44:12 +01:00
mballoc.h ext4: remove unused #include <linux/version.h> 2009-12-14 09:24:20 -05:00
migrate.c ext4: quota macros cleanup 2009-12-08 22:42:15 -05:00
move_extent.c ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT 2009-12-06 23:38:31 -05:00
namei.c ext4: quota macros cleanup 2009-12-08 22:42:15 -05:00
resize.c ext4: Return the PTR_ERR of the correct pointer in setup_new_group_blocks() 2009-12-07 10:38:16 -05:00
super.c ext4: Calculate metadata requirements more accurately 2010-01-01 02:41:30 -05:00
symlink.c ext4: Rename ext4dev to ext4 2008-10-10 20:02:48 -04:00
xattr_security.c sanitize xattr handler prototypes 2009-12-16 12:16:49 -05:00
xattr_trusted.c sanitize xattr handler prototypes 2009-12-16 12:16:49 -05:00
xattr_user.c sanitize xattr handler prototypes 2009-12-16 12:16:49 -05:00
xattr.c ext4: Eliminate potential double free on error path 2009-12-23 07:52:31 -05:00
xattr.h ext4: Rename ext4dev to ext4 2008-10-10 20:02:48 -04:00