diff options
author | Mingming Cao <cmm@us.ibm.com> | 2008-07-14 17:52:37 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2008-07-14 17:52:37 -0400 |
commit | d2a1763791a634e315ec926b62829c1e88842c86 (patch) | |
tree | 75a701a89829ba7d728fdc19c30aa2794b9706b9 /fs/ext4/ext4_i.h | |
parent | e8ced39d5e8911c662d4d69a342b9d053eaaac4e (diff) |
ext4: delayed allocation ENOSPC handling
This patch does block reservation for delayed
allocation, to avoid ENOSPC later at page flush time.
Blocks(data and metadata) are reserved at da_write_begin()
time, the freeblocks counter is updated by then, and the number of
reserved blocks is store in per inode counter.
At the writepage time, the unused reserved meta blocks are returned
back. At unlink/truncate time, reserved blocks are properly released.
Updated fix from Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
to fix the oldallocator block reservation accounting with delalloc, added
lock to guard the counters and also fix the reservation for meta blocks.
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Mingming Cao <cmm@us.ibm.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/ext4_i.h')
-rw-r--r-- | fs/ext4/ext4_i.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/ext4/ext4_i.h b/fs/ext4/ext4_i.h index c2903ef72159..ef7409f0e7e4 100644 --- a/fs/ext4/ext4_i.h +++ b/fs/ext4/ext4_i.h | |||
@@ -163,6 +163,13 @@ struct ext4_inode_info { | |||
163 | /* mballoc */ | 163 | /* mballoc */ |
164 | struct list_head i_prealloc_list; | 164 | struct list_head i_prealloc_list; |
165 | spinlock_t i_prealloc_lock; | 165 | spinlock_t i_prealloc_lock; |
166 | |||
167 | /* allocation reservation info for delalloc */ | ||
168 | unsigned long i_reserved_data_blocks; | ||
169 | unsigned long i_reserved_meta_blocks; | ||
170 | unsigned long i_allocated_meta_blocks; | ||
171 | unsigned short i_delalloc_reserved_flag; | ||
172 | spinlock_t i_block_reservation_lock; | ||
166 | }; | 173 | }; |
167 | 174 | ||
168 | #endif /* _EXT4_I */ | 175 | #endif /* _EXT4_I */ |