aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2009-06-15 03:45:05 -0400
committerTheodore Ts'o <tytso@mit.edu>2009-06-15 03:45:05 -0400
commit0610b6e99939828b77eec020ead0e1f44cba38ca (patch)
treeede610c64a0456a43618e500c577b35e462f8953 /fs/ext4
parent11013911daea4820147ae6d7094dd7c6894e8651 (diff)
ext4: Fix 64-bit block type problem on 32-bit platforms
The function ext4_mb_free_blocks() was using an "unsigned long" to pass a block number; this will cause 64-bit block numbers to get truncated on x86 and other 32-bit platforms. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/ext4.h2
-rw-r--r--fs/ext4/mballoc.c8
2 files changed, 5 insertions, 5 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 746cdcba969d..17b9998680e3 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -1341,7 +1341,7 @@ extern void ext4_discard_preallocations(struct inode *);
1341extern int __init init_ext4_mballoc(void); 1341extern int __init init_ext4_mballoc(void);
1342extern void exit_ext4_mballoc(void); 1342extern void exit_ext4_mballoc(void);
1343extern void ext4_mb_free_blocks(handle_t *, struct inode *, 1343extern void ext4_mb_free_blocks(handle_t *, struct inode *,
1344 unsigned long, unsigned long, int, unsigned long *); 1344 ext4_fsblk_t, unsigned long, int, unsigned long *);
1345extern int ext4_mb_add_groupinfo(struct super_block *sb, 1345extern int ext4_mb_add_groupinfo(struct super_block *sb,
1346 ext4_group_t i, struct ext4_group_desc *desc); 1346 ext4_group_t i, struct ext4_group_desc *desc);
1347extern void ext4_mb_update_group_info(struct ext4_group_info *grp, 1347extern void ext4_mb_update_group_info(struct ext4_group_info *grp,
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index 8d98070b48fb..519a0a686d94 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -4689,7 +4689,7 @@ ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b,
4689 * Main entry point into mballoc to free blocks 4689 * Main entry point into mballoc to free blocks
4690 */ 4690 */
4691void ext4_mb_free_blocks(handle_t *handle, struct inode *inode, 4691void ext4_mb_free_blocks(handle_t *handle, struct inode *inode,
4692 unsigned long block, unsigned long count, 4692 ext4_fsblk_t block, unsigned long count,
4693 int metadata, unsigned long *freed) 4693 int metadata, unsigned long *freed)
4694{ 4694{
4695 struct buffer_head *bitmap_bh = NULL; 4695 struct buffer_head *bitmap_bh = NULL;
@@ -4715,11 +4715,11 @@ void ext4_mb_free_blocks(handle_t *handle, struct inode *inode,
4715 block + count > ext4_blocks_count(es)) { 4715 block + count > ext4_blocks_count(es)) {
4716 ext4_error(sb, __func__, 4716 ext4_error(sb, __func__,
4717 "Freeing blocks not in datazone - " 4717 "Freeing blocks not in datazone - "
4718 "block = %lu, count = %lu", block, count); 4718 "block = %llu, count = %lu", block, count);
4719 goto error_return; 4719 goto error_return;
4720 } 4720 }
4721 4721
4722 ext4_debug("freeing block %lu\n", block); 4722 ext4_debug("freeing block %llu\n", block);
4723 trace_ext4_free_blocks(inode, block, count, metadata); 4723 trace_ext4_free_blocks(inode, block, count, metadata);
4724 4724
4725 ac = kmem_cache_alloc(ext4_ac_cachep, GFP_NOFS); 4725 ac = kmem_cache_alloc(ext4_ac_cachep, GFP_NOFS);
@@ -4761,7 +4761,7 @@ do_more:
4761 4761
4762 ext4_error(sb, __func__, 4762 ext4_error(sb, __func__,
4763 "Freeing blocks in system zone - " 4763 "Freeing blocks in system zone - "
4764 "Block = %lu, count = %lu", block, count); 4764 "Block = %llu, count = %lu", block, count);
4765 /* err = 0. ext4_std_error should be a no op */ 4765 /* err = 0. ext4_std_error should be a no op */
4766 goto error_return; 4766 goto error_return;
4767 } 4767 }