aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ext4/mballoc.c23
-rw-r--r--fs/ext4/mballoc.h18
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 */
333static struct kmem_cache *ext4_pspace_cachep;
334static struct kmem_cache *ext4_ac_cachep;
335static struct kmem_cache *ext4_free_ext_cachep;
336static void ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
337 ext4_group_t group);
338static int ext4_mb_init_per_dev_proc(struct super_block *sb);
339static int ext4_mb_destroy_per_dev_proc(struct super_block *sb);
340static void release_blocks_on_commit(journal_t *journal, transaction_t *txn);
341
342
333 343
334static inline void *mb_correct_addr_and_bit(int *bit, void *addr) 344static 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
102static struct kmem_cache *ext4_pspace_cachep;
103static struct kmem_cache *ext4_ac_cachep;
104static struct kmem_cache *ext4_free_ext_cachep;
105 102
106struct ext4_free_data { 103struct 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
266static 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
271struct buffer_head *read_block_bitmap(struct super_block *, ext4_group_t); 266struct buffer_head *read_block_bitmap(struct super_block *, ext4_group_t);
272 267
273static void ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
274 ext4_group_t group);
275static void ext4_mb_return_to_preallocation(struct inode *inode,
276 struct ext4_buddy *e4b, sector_t block,
277 int count);
278static void ext4_mb_put_pa(struct ext4_allocation_context *,
279 struct super_block *, struct ext4_prealloc_space *pa);
280static int ext4_mb_init_per_dev_proc(struct super_block *sb);
281static int ext4_mb_destroy_per_dev_proc(struct super_block *sb);
282static void release_blocks_on_commit(journal_t *journal, transaction_t *txn);
283
284 268
285static inline void ext4_lock_group(struct super_block *sb, ext4_group_t group) 269static 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
309static ext4_fsblk_t ext4_grp_offs_to_block(struct super_block *sb, 293static 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;