diff options
-rw-r--r-- | fs/ext4/mballoc.c | 23 | ||||
-rw-r--r-- | fs/ext4/mballoc.h | 18 |
2 files changed, 20 insertions, 21 deletions
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index d2b1bcaf88ec..c17063ddb307 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c | |||
@@ -100,7 +100,7 @@ | |||
100 | * inode as: | 100 | * inode as: |
101 | * | 101 | * |
102 | * { page } | 102 | * { page } |
103 | * [ group 0 buddy][ group 0 bitmap] [group 1][ group 1]... | 103 | * [ group 0 bitmap][ group 0 buddy] [group 1][ group 1]... |
104 | * | 104 | * |
105 | * | 105 | * |
106 | * one block each for bitmap and buddy information. So for each group we | 106 | * one block each for bitmap and buddy information. So for each group we |
@@ -330,6 +330,16 @@ | |||
330 | * object | 330 | * object |
331 | * | 331 | * |
332 | */ | 332 | */ |
333 | static struct kmem_cache *ext4_pspace_cachep; | ||
334 | static struct kmem_cache *ext4_ac_cachep; | ||
335 | static struct kmem_cache *ext4_free_ext_cachep; | ||
336 | static void ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap, | ||
337 | ext4_group_t group); | ||
338 | static int ext4_mb_init_per_dev_proc(struct super_block *sb); | ||
339 | static int ext4_mb_destroy_per_dev_proc(struct super_block *sb); | ||
340 | static void release_blocks_on_commit(journal_t *journal, transaction_t *txn); | ||
341 | |||
342 | |||
333 | 343 | ||
334 | static inline void *mb_correct_addr_and_bit(int *bit, void *addr) | 344 | static inline void *mb_correct_addr_and_bit(int *bit, void *addr) |
335 | { | 345 | { |
@@ -716,7 +726,7 @@ static void ext4_mb_generate_buddy(struct super_block *sb, | |||
716 | * stored in the inode as | 726 | * stored in the inode as |
717 | * | 727 | * |
718 | * { page } | 728 | * { page } |
719 | * [ group 0 buddy][ group 0 bitmap] [group 1][ group 1]... | 729 | * [ group 0 bitmap][ group 0 buddy] [group 1][ group 1]... |
720 | * | 730 | * |
721 | * | 731 | * |
722 | * one block each for bitmap and buddy information. | 732 | * one block each for bitmap and buddy information. |
@@ -1322,8 +1332,13 @@ static void ext4_mb_use_best_found(struct ext4_allocation_context *ac, | |||
1322 | ac->ac_tail = ret & 0xffff; | 1332 | ac->ac_tail = ret & 0xffff; |
1323 | ac->ac_buddy = ret >> 16; | 1333 | ac->ac_buddy = ret >> 16; |
1324 | 1334 | ||
1325 | /* XXXXXXX: SUCH A HORRIBLE **CK */ | 1335 | /* |
1326 | /*FIXME!! Why ? */ | 1336 | * take the page reference. We want the page to be pinned |
1337 | * so that we don't get a ext4_mb_init_cache_call for this | ||
1338 | * group until we update the bitmap. That would mean we | ||
1339 | * double allocate blocks. The reference is dropped | ||
1340 | * in ext4_mb_release_context | ||
1341 | */ | ||
1327 | ac->ac_bitmap_page = e4b->bd_bitmap_page; | 1342 | ac->ac_bitmap_page = e4b->bd_bitmap_page; |
1328 | get_page(ac->ac_bitmap_page); | 1343 | get_page(ac->ac_bitmap_page); |
1329 | ac->ac_buddy_page = e4b->bd_buddy_page; | 1344 | ac->ac_buddy_page = e4b->bd_buddy_page; |
diff --git a/fs/ext4/mballoc.h b/fs/ext4/mballoc.h index a931b6b4f6ad..997f78fff129 100644 --- a/fs/ext4/mballoc.h +++ b/fs/ext4/mballoc.h | |||
@@ -99,9 +99,6 @@ | |||
99 | */ | 99 | */ |
100 | #define MB_DEFAULT_GROUP_PREALLOC 512 | 100 | #define MB_DEFAULT_GROUP_PREALLOC 512 |
101 | 101 | ||
102 | static struct kmem_cache *ext4_pspace_cachep; | ||
103 | static struct kmem_cache *ext4_ac_cachep; | ||
104 | static struct kmem_cache *ext4_free_ext_cachep; | ||
105 | 102 | ||
106 | struct ext4_free_data { | 103 | struct ext4_free_data { |
107 | /* this links the free block information from group_info */ | 104 | /* this links the free block information from group_info */ |
@@ -262,25 +259,12 @@ static inline void ext4_mb_store_history(struct ext4_allocation_context *ac) | |||
262 | { | 259 | { |
263 | return; | 260 | return; |
264 | } | 261 | } |
265 | #else | ||
266 | static void ext4_mb_store_history(struct ext4_allocation_context *ac); | ||
267 | #endif | 262 | #endif |
268 | 263 | ||
269 | #define in_range(b, first, len) ((b) >= (first) && (b) <= (first) + (len) - 1) | 264 | #define in_range(b, first, len) ((b) >= (first) && (b) <= (first) + (len) - 1) |
270 | 265 | ||
271 | struct buffer_head *read_block_bitmap(struct super_block *, ext4_group_t); | 266 | struct buffer_head *read_block_bitmap(struct super_block *, ext4_group_t); |
272 | 267 | ||
273 | static void ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap, | ||
274 | ext4_group_t group); | ||
275 | static void ext4_mb_return_to_preallocation(struct inode *inode, | ||
276 | struct ext4_buddy *e4b, sector_t block, | ||
277 | int count); | ||
278 | static void ext4_mb_put_pa(struct ext4_allocation_context *, | ||
279 | struct super_block *, struct ext4_prealloc_space *pa); | ||
280 | static int ext4_mb_init_per_dev_proc(struct super_block *sb); | ||
281 | static int ext4_mb_destroy_per_dev_proc(struct super_block *sb); | ||
282 | static void release_blocks_on_commit(journal_t *journal, transaction_t *txn); | ||
283 | |||
284 | 268 | ||
285 | static inline void ext4_lock_group(struct super_block *sb, ext4_group_t group) | 269 | static inline void ext4_lock_group(struct super_block *sb, ext4_group_t group) |
286 | { | 270 | { |
@@ -306,7 +290,7 @@ static inline int ext4_is_group_locked(struct super_block *sb, | |||
306 | &(grinfo->bb_state)); | 290 | &(grinfo->bb_state)); |
307 | } | 291 | } |
308 | 292 | ||
309 | static ext4_fsblk_t ext4_grp_offs_to_block(struct super_block *sb, | 293 | static inline ext4_fsblk_t ext4_grp_offs_to_block(struct super_block *sb, |
310 | struct ext4_free_extent *fex) | 294 | struct ext4_free_extent *fex) |
311 | { | 295 | { |
312 | ext4_fsblk_t block; | 296 | ext4_fsblk_t block; |