mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-03-29 18:34:15 +00:00
ext4: different maxbytes functions for bitmap & extent files
use 2 different maxbytes functions for bitmapped & extent-based files. Signed-off-by: Eric Sandeen <sandeen@redhat.com>
This commit is contained in:
parent
8180a5627d
commit
cd2291a463
1 changed files with 42 additions and 3 deletions
|
@ -1600,19 +1600,58 @@ static void ext4_orphan_cleanup (struct super_block * sb,
|
||||||
#endif
|
#endif
|
||||||
sb->s_flags = s_flags; /* Restore MS_RDONLY status */
|
sb->s_flags = s_flags; /* Restore MS_RDONLY status */
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* Maximal extent format file size.
|
||||||
|
* Resulting logical blkno at s_maxbytes must fit in our on-disk
|
||||||
|
* extent format containers, within a sector_t, and within i_blocks
|
||||||
|
* in the vfs. ext4 inode has 48 bits of i_block in fsblock units,
|
||||||
|
* so that won't be a limiting factor.
|
||||||
|
*
|
||||||
|
* Note, this does *not* consider any metadata overhead for vfs i_blocks.
|
||||||
|
*/
|
||||||
|
static loff_t ext4_max_size(int blkbits)
|
||||||
|
{
|
||||||
|
loff_t res;
|
||||||
|
loff_t upper_limit = MAX_LFS_FILESIZE;
|
||||||
|
|
||||||
|
/* small i_blocks in vfs inode? */
|
||||||
|
if (sizeof(blkcnt_t) < sizeof(u64)) {
|
||||||
|
/*
|
||||||
|
* CONFIG_LSF is not enabled implies the inode
|
||||||
|
* i_block represent total blocks in 512 bytes
|
||||||
|
* 32 == size of vfs inode i_blocks * 8
|
||||||
|
*/
|
||||||
|
upper_limit = (1LL << 32) - 1;
|
||||||
|
|
||||||
|
/* total blocks in file system block size */
|
||||||
|
upper_limit >>= (blkbits - 9);
|
||||||
|
upper_limit <<= blkbits;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 32-bit extent-start container, ee_block */
|
||||||
|
res = 1LL << 32;
|
||||||
|
res <<= blkbits;
|
||||||
|
res -= 1;
|
||||||
|
|
||||||
|
/* Sanity check against vm- & vfs- imposed limits */
|
||||||
|
if (res > upper_limit)
|
||||||
|
res = upper_limit;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Maximal file size. There is a direct, and {,double-,triple-}indirect
|
* Maximal bitmap file size. There is a direct, and {,double-,triple-}indirect
|
||||||
* block limit, and also a limit of (2^48 - 1) 512-byte sectors in i_blocks.
|
* block limit, and also a limit of (2^48 - 1) 512-byte sectors in i_blocks.
|
||||||
* We need to be 1 filesystem block less than the 2^48 sector limit.
|
* We need to be 1 filesystem block less than the 2^48 sector limit.
|
||||||
*/
|
*/
|
||||||
static loff_t ext4_max_size(int bits)
|
static loff_t ext4_max_bitmap_size(int bits)
|
||||||
{
|
{
|
||||||
loff_t res = EXT4_NDIR_BLOCKS;
|
loff_t res = EXT4_NDIR_BLOCKS;
|
||||||
int meta_blocks;
|
int meta_blocks;
|
||||||
loff_t upper_limit;
|
loff_t upper_limit;
|
||||||
/* This is calculated to be the largest file size for a
|
/* This is calculated to be the largest file size for a
|
||||||
* dense, file such that the total number of
|
* dense, bitmapped file such that the total number of
|
||||||
* sectors in the file, including data and all indirect blocks,
|
* sectors in the file, including data and all indirect blocks,
|
||||||
* does not exceed 2^48 -1
|
* does not exceed 2^48 -1
|
||||||
* __u32 i_blocks_lo and _u16 i_blocks_high representing the
|
* __u32 i_blocks_lo and _u16 i_blocks_high representing the
|
||||||
|
|
Loading…
Add table
Reference in a new issue