diff options
author | Theodore Ts'o <tytso@mit.edu> | 2009-06-15 03:45:05 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2009-06-15 03:45:05 -0400 |
commit | 0610b6e99939828b77eec020ead0e1f44cba38ca (patch) | |
tree | ede610c64a0456a43618e500c577b35e462f8953 /fs/ext4/mballoc.c | |
parent | 11013911daea4820147ae6d7094dd7c6894e8651 (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/mballoc.c')
-rw-r--r-- | fs/ext4/mballoc.c | 8 |
1 files changed, 4 insertions, 4 deletions
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 | */ |
4691 | void ext4_mb_free_blocks(handle_t *handle, struct inode *inode, | 4691 | void 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 | } |