Commit a36b4498 authored by Eric Sandeen's avatar Eric Sandeen Committed by Theodore Ts'o

ext4: use ext4_grpblk_t more extensively

unsigned  short is potentially too small to track blocks within
a group; today it is safe due to restrictions in e2fsprogs but
we have _lo / _hi bits for group blocks with the intent to go
up to 32 bits, so clean this up now.

There are many more places where we use unsigned/int/unsigned int
to contain a group block but this should at least fix all the
short types.

I added a few comments to the struct ext4_group_info definition
as well.
Signed-off-by: default avatarEric Sandeen <sandeen@redhat.com>
Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
parent 1927805e
...@@ -1577,15 +1577,18 @@ static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize) ...@@ -1577,15 +1577,18 @@ static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize)
struct ext4_group_info { struct ext4_group_info {
unsigned long bb_state; unsigned long bb_state;
struct rb_root bb_free_root; struct rb_root bb_free_root;
unsigned short bb_first_free; ext4_grpblk_t bb_first_free; /* first free block */
unsigned short bb_free; ext4_grpblk_t bb_free; /* total free blocks */
unsigned short bb_fragments; ext4_grpblk_t bb_fragments; /* nr of freespace fragments */
struct list_head bb_prealloc_list; struct list_head bb_prealloc_list;
#ifdef DOUBLE_CHECK #ifdef DOUBLE_CHECK
void *bb_bitmap; void *bb_bitmap;
#endif #endif
struct rw_semaphore alloc_sem; struct rw_semaphore alloc_sem;
unsigned short bb_counters[]; ext4_grpblk_t bb_counters[]; /* Nr of free power-of-two-block
* regions, index is order.
* bb_counters[3] = 5 means
* 5 free 8-block regions. */
}; };
#define EXT4_GROUP_INFO_NEED_INIT_BIT 0 #define EXT4_GROUP_INFO_NEED_INIT_BIT 0
......
...@@ -623,13 +623,13 @@ static int __mb_check_buddy(struct ext4_buddy *e4b, char *file, ...@@ -623,13 +623,13 @@ static int __mb_check_buddy(struct ext4_buddy *e4b, char *file,
/* FIXME!! need more doc */ /* FIXME!! need more doc */
static void ext4_mb_mark_free_simple(struct super_block *sb, static void ext4_mb_mark_free_simple(struct super_block *sb,
void *buddy, unsigned first, int len, void *buddy, ext4_grpblk_t first, ext4_grpblk_t len,
struct ext4_group_info *grp) struct ext4_group_info *grp)
{ {
struct ext4_sb_info *sbi = EXT4_SB(sb); struct ext4_sb_info *sbi = EXT4_SB(sb);
unsigned short min; ext4_grpblk_t min;
unsigned short max; ext4_grpblk_t max;
unsigned short chunk; ext4_grpblk_t chunk;
unsigned short border; unsigned short border;
BUG_ON(len > EXT4_BLOCKS_PER_GROUP(sb)); BUG_ON(len > EXT4_BLOCKS_PER_GROUP(sb));
...@@ -663,10 +663,10 @@ void ext4_mb_generate_buddy(struct super_block *sb, ...@@ -663,10 +663,10 @@ void ext4_mb_generate_buddy(struct super_block *sb,
void *buddy, void *bitmap, ext4_group_t group) void *buddy, void *bitmap, ext4_group_t group)
{ {
struct ext4_group_info *grp = ext4_get_group_info(sb, group); struct ext4_group_info *grp = ext4_get_group_info(sb, group);
unsigned short max = EXT4_BLOCKS_PER_GROUP(sb); ext4_grpblk_t max = EXT4_BLOCKS_PER_GROUP(sb);
unsigned short i = 0; ext4_grpblk_t i = 0;
unsigned short first; ext4_grpblk_t first;
unsigned short len; ext4_grpblk_t len;
unsigned free = 0; unsigned free = 0;
unsigned fragments = 0; unsigned fragments = 0;
unsigned long long period = get_cycles(); unsigned long long period = get_cycles();
...@@ -2325,7 +2325,7 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v) ...@@ -2325,7 +2325,7 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)
struct ext4_buddy e4b; struct ext4_buddy e4b;
struct sg { struct sg {
struct ext4_group_info info; struct ext4_group_info info;
unsigned short counters[16]; ext4_grpblk_t counters[16];
} sg; } sg;
group--; group--;
......
...@@ -136,8 +136,8 @@ struct ext4_prealloc_space { ...@@ -136,8 +136,8 @@ struct ext4_prealloc_space {
unsigned pa_deleted; unsigned pa_deleted;
ext4_fsblk_t pa_pstart; /* phys. block */ ext4_fsblk_t pa_pstart; /* phys. block */
ext4_lblk_t pa_lstart; /* log. block */ ext4_lblk_t pa_lstart; /* log. block */
unsigned short pa_len; /* len of preallocated chunk */ ext4_grpblk_t pa_len; /* len of preallocated chunk */
unsigned short pa_free; /* how many blocks are free */ ext4_grpblk_t pa_free; /* how many blocks are free */
unsigned short pa_type; /* pa type. inode or group */ unsigned short pa_type; /* pa type. inode or group */
spinlock_t *pa_obj_lock; spinlock_t *pa_obj_lock;
struct inode *pa_inode; /* hack, for history only */ struct inode *pa_inode; /* hack, for history only */
...@@ -152,7 +152,7 @@ struct ext4_free_extent { ...@@ -152,7 +152,7 @@ struct ext4_free_extent {
ext4_lblk_t fe_logical; ext4_lblk_t fe_logical;
ext4_grpblk_t fe_start; ext4_grpblk_t fe_start;
ext4_group_t fe_group; ext4_group_t fe_group;
int fe_len; ext4_grpblk_t fe_len;
}; };
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment