diff options
author | Yongqiang Yang <xiaoqiangnk@gmail.com> | 2011-07-26 21:46:07 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2011-07-26 21:46:07 -0400 |
commit | cc7365dfe48cb2191f1572bf69e30d3e58716313 (patch) | |
tree | 1d0a533d6ffcee71900894741995a1d0cf91ab0f /fs/ext4/mballoc.c | |
parent | 0529155e8a4bcb77dfc9ceaea19c6501487e452b (diff) |
ext4: let ext4_group_add_blocks() return an error code
This patch lets ext4_group_add_blocks() return an error code if it
fails, so that upper functions can handle error correctly.
Signed-off-by: Yongqiang Yang <xiaoqiangnk@gmail.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/mballoc.c')
-rw-r--r-- | fs/ext4/mballoc.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 93035ea70c0b..dbe429567eb3 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c | |||
@@ -4675,7 +4675,7 @@ error_return: | |||
4675 | * | 4675 | * |
4676 | * This marks the blocks as free in the bitmap and buddy. | 4676 | * This marks the blocks as free in the bitmap and buddy. |
4677 | */ | 4677 | */ |
4678 | void ext4_group_add_blocks(handle_t *handle, struct super_block *sb, | 4678 | int ext4_group_add_blocks(handle_t *handle, struct super_block *sb, |
4679 | ext4_fsblk_t block, unsigned long count) | 4679 | ext4_fsblk_t block, unsigned long count) |
4680 | { | 4680 | { |
4681 | struct buffer_head *bitmap_bh = NULL; | 4681 | struct buffer_head *bitmap_bh = NULL; |
@@ -4696,15 +4696,24 @@ void ext4_group_add_blocks(handle_t *handle, struct super_block *sb, | |||
4696 | * Check to see if we are freeing blocks across a group | 4696 | * Check to see if we are freeing blocks across a group |
4697 | * boundary. | 4697 | * boundary. |
4698 | */ | 4698 | */ |
4699 | if (bit + count > EXT4_BLOCKS_PER_GROUP(sb)) | 4699 | if (bit + count > EXT4_BLOCKS_PER_GROUP(sb)) { |
4700 | ext4_warning(sb, "too much blocks added to group %u\n", | ||
4701 | block_group); | ||
4702 | err = -EINVAL; | ||
4700 | goto error_return; | 4703 | goto error_return; |
4704 | } | ||
4701 | 4705 | ||
4702 | bitmap_bh = ext4_read_block_bitmap(sb, block_group); | 4706 | bitmap_bh = ext4_read_block_bitmap(sb, block_group); |
4703 | if (!bitmap_bh) | 4707 | if (!bitmap_bh) { |
4708 | err = -EIO; | ||
4704 | goto error_return; | 4709 | goto error_return; |
4710 | } | ||
4711 | |||
4705 | desc = ext4_get_group_desc(sb, block_group, &gd_bh); | 4712 | desc = ext4_get_group_desc(sb, block_group, &gd_bh); |
4706 | if (!desc) | 4713 | if (!desc) { |
4714 | err = -EIO; | ||
4707 | goto error_return; | 4715 | goto error_return; |
4716 | } | ||
4708 | 4717 | ||
4709 | if (in_range(ext4_block_bitmap(sb, desc), block, count) || | 4718 | if (in_range(ext4_block_bitmap(sb, desc), block, count) || |
4710 | in_range(ext4_inode_bitmap(sb, desc), block, count) || | 4719 | in_range(ext4_inode_bitmap(sb, desc), block, count) || |
@@ -4714,6 +4723,7 @@ void ext4_group_add_blocks(handle_t *handle, struct super_block *sb, | |||
4714 | ext4_error(sb, "Adding blocks in system zones - " | 4723 | ext4_error(sb, "Adding blocks in system zones - " |
4715 | "Block = %llu, count = %lu", | 4724 | "Block = %llu, count = %lu", |
4716 | block, count); | 4725 | block, count); |
4726 | err = -EINVAL; | ||
4717 | goto error_return; | 4727 | goto error_return; |
4718 | } | 4728 | } |
4719 | 4729 | ||
@@ -4782,7 +4792,7 @@ void ext4_group_add_blocks(handle_t *handle, struct super_block *sb, | |||
4782 | error_return: | 4792 | error_return: |
4783 | brelse(bitmap_bh); | 4793 | brelse(bitmap_bh); |
4784 | ext4_std_error(sb, err); | 4794 | ext4_std_error(sb, err); |
4785 | return; | 4795 | return err; |
4786 | } | 4796 | } |
4787 | 4797 | ||
4788 | /** | 4798 | /** |