mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
ext4: add ext4_group_t, and change all group variables to this type.
In many places variables for block group are of type int, which limits the maximum number of block groups to 2^31. Each block group can have up to 2^15 blocks, with a 4K block size, and the max filesystem size is limited to 2^31 * (2^15 * 2^12) = 2^58 -- or 256 PB This patch introduces a new type ext4_group_t, of type unsigned long, to represent block group numbers in ext4. All occurrences of block group variables are converted to type ext4_group_t. Signed-off-by: Avantika Mathur <mathur@us.ibm.com>
This commit is contained in:
parent
bba907433b
commit
fd2d42912f
9 changed files with 91 additions and 87 deletions
|
@ -64,8 +64,8 @@ void mark_bitmap_end(int start_bit, int end_bit, char *bitmap)
|
|||
}
|
||||
|
||||
/* Initializes an uninitialized inode bitmap */
|
||||
unsigned ext4_init_inode_bitmap(struct super_block *sb,
|
||||
struct buffer_head *bh, int block_group,
|
||||
unsigned ext4_init_inode_bitmap(struct super_block *sb, struct buffer_head *bh,
|
||||
ext4_group_t block_group,
|
||||
struct ext4_group_desc *gdp)
|
||||
{
|
||||
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
||||
|
@ -75,7 +75,7 @@ unsigned ext4_init_inode_bitmap(struct super_block *sb,
|
|||
/* If checksum is bad mark all blocks and inodes use to prevent
|
||||
* allocation, essentially implementing a per-group read-only flag. */
|
||||
if (!ext4_group_desc_csum_verify(sbi, block_group, gdp)) {
|
||||
ext4_error(sb, __FUNCTION__, "Checksum bad for group %u\n",
|
||||
ext4_error(sb, __FUNCTION__, "Checksum bad for group %lu\n",
|
||||
block_group);
|
||||
gdp->bg_free_blocks_count = 0;
|
||||
gdp->bg_free_inodes_count = 0;
|
||||
|
@ -98,7 +98,7 @@ unsigned ext4_init_inode_bitmap(struct super_block *sb,
|
|||
* Return buffer_head of bitmap on success or NULL.
|
||||
*/
|
||||
static struct buffer_head *
|
||||
read_inode_bitmap(struct super_block * sb, unsigned long block_group)
|
||||
read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)
|
||||
{
|
||||
struct ext4_group_desc *desc;
|
||||
struct buffer_head *bh = NULL;
|
||||
|
@ -152,7 +152,7 @@ void ext4_free_inode (handle_t *handle, struct inode * inode)
|
|||
unsigned long ino;
|
||||
struct buffer_head *bitmap_bh = NULL;
|
||||
struct buffer_head *bh2;
|
||||
unsigned long block_group;
|
||||
ext4_group_t block_group;
|
||||
unsigned long bit;
|
||||
struct ext4_group_desc * gdp;
|
||||
struct ext4_super_block * es;
|
||||
|
@ -260,12 +260,12 @@ error_return:
|
|||
* For other inodes, search forward from the parent directory\'s block
|
||||
* group to find a free inode.
|
||||
*/
|
||||
static int find_group_dir(struct super_block *sb, struct inode *parent)
|
||||
static ext4_group_t find_group_dir(struct super_block *sb, struct inode *parent)
|
||||
{
|
||||
int ngroups = EXT4_SB(sb)->s_groups_count;
|
||||
ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count;
|
||||
unsigned int freei, avefreei;
|
||||
struct ext4_group_desc *desc, *best_desc = NULL;
|
||||
int group, best_group = -1;
|
||||
ext4_group_t group, best_group = -1;
|
||||
|
||||
freei = percpu_counter_read_positive(&EXT4_SB(sb)->s_freeinodes_counter);
|
||||
avefreei = freei / ngroups;
|
||||
|
@ -314,12 +314,13 @@ static int find_group_dir(struct super_block *sb, struct inode *parent)
|
|||
#define INODE_COST 64
|
||||
#define BLOCK_COST 256
|
||||
|
||||
static int find_group_orlov(struct super_block *sb, struct inode *parent)
|
||||
static ext4_group_t find_group_orlov(struct super_block *sb,
|
||||
struct inode *parent)
|
||||
{
|
||||
int parent_group = EXT4_I(parent)->i_block_group;
|
||||
ext4_group_t parent_group = EXT4_I(parent)->i_block_group;
|
||||
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
||||
struct ext4_super_block *es = sbi->s_es;
|
||||
int ngroups = sbi->s_groups_count;
|
||||
ext4_group_t ngroups = sbi->s_groups_count;
|
||||
int inodes_per_group = EXT4_INODES_PER_GROUP(sb);
|
||||
unsigned int freei, avefreei;
|
||||
ext4_fsblk_t freeb, avefreeb;
|
||||
|
@ -327,7 +328,7 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent)
|
|||
unsigned int ndirs;
|
||||
int max_debt, max_dirs, min_inodes;
|
||||
ext4_grpblk_t min_blocks;
|
||||
int group = -1, i;
|
||||
ext4_group_t group = -1, i;
|
||||
struct ext4_group_desc *desc;
|
||||
|
||||
freei = percpu_counter_read_positive(&sbi->s_freeinodes_counter);
|
||||
|
@ -340,7 +341,7 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent)
|
|||
if ((parent == sb->s_root->d_inode) ||
|
||||
(EXT4_I(parent)->i_flags & EXT4_TOPDIR_FL)) {
|
||||
int best_ndir = inodes_per_group;
|
||||
int best_group = -1;
|
||||
ext4_group_t best_group = -1;
|
||||
|
||||
get_random_bytes(&group, sizeof(group));
|
||||
parent_group = (unsigned)group % ngroups;
|
||||
|
@ -415,12 +416,13 @@ fallback:
|
|||
return -1;
|
||||
}
|
||||
|
||||
static int find_group_other(struct super_block *sb, struct inode *parent)
|
||||
static ext4_group_t find_group_other(struct super_block *sb,
|
||||
struct inode *parent)
|
||||
{
|
||||
int parent_group = EXT4_I(parent)->i_block_group;
|
||||
int ngroups = EXT4_SB(sb)->s_groups_count;
|
||||
ext4_group_t parent_group = EXT4_I(parent)->i_block_group;
|
||||
ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count;
|
||||
struct ext4_group_desc *desc;
|
||||
int group, i;
|
||||
ext4_group_t group, i;
|
||||
|
||||
/*
|
||||
* Try to place the inode in its parent directory
|
||||
|
@ -487,7 +489,7 @@ struct inode *ext4_new_inode(handle_t *handle, struct inode * dir, int mode)
|
|||
struct super_block *sb;
|
||||
struct buffer_head *bitmap_bh = NULL;
|
||||
struct buffer_head *bh2;
|
||||
int group;
|
||||
ext4_group_t group;
|
||||
unsigned long ino = 0;
|
||||
struct inode * inode;
|
||||
struct ext4_group_desc * gdp = NULL;
|
||||
|
@ -583,7 +585,7 @@ got:
|
|||
ino > EXT4_INODES_PER_GROUP(sb)) {
|
||||
ext4_error(sb, __FUNCTION__,
|
||||
"reserved inode or inode > inodes count - "
|
||||
"block_group = %d, inode=%lu", group,
|
||||
"block_group = %lu, inode=%lu", group,
|
||||
ino + group * EXT4_INODES_PER_GROUP(sb));
|
||||
err = -EIO;
|
||||
goto fail;
|
||||
|
@ -777,7 +779,7 @@ fail_drop:
|
|||
struct inode *ext4_orphan_get(struct super_block *sb, unsigned long ino)
|
||||
{
|
||||
unsigned long max_ino = le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count);
|
||||
unsigned long block_group;
|
||||
ext4_group_t block_group;
|
||||
int bit;
|
||||
struct buffer_head *bitmap_bh = NULL;
|
||||
struct inode *inode = NULL;
|
||||
|
@ -833,7 +835,7 @@ unsigned long ext4_count_free_inodes (struct super_block * sb)
|
|||
{
|
||||
unsigned long desc_count;
|
||||
struct ext4_group_desc *gdp;
|
||||
int i;
|
||||
ext4_group_t i;
|
||||
#ifdef EXT4FS_DEBUG
|
||||
struct ext4_super_block *es;
|
||||
unsigned long bitmap_count, x;
|
||||
|
@ -879,7 +881,7 @@ unsigned long ext4_count_free_inodes (struct super_block * sb)
|
|||
unsigned long ext4_count_dirs (struct super_block * sb)
|
||||
{
|
||||
unsigned long count = 0;
|
||||
int i;
|
||||
ext4_group_t i;
|
||||
|
||||
for (i = 0; i < EXT4_SB(sb)->s_groups_count; i++) {
|
||||
struct ext4_group_desc *gdp = ext4_get_group_desc (sb, i, NULL);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue