mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
new helper: ext2_image_size()
... implemented that way since the next commit will leave it almost alone in ext2_fs.h - most of the file (including struct ext2_super_block) is going to move to fs/ext2/ext2.h. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
2f99c36986
commit
39429c5e4a
3 changed files with 30 additions and 8 deletions
|
@ -550,6 +550,7 @@ static __init void memory_setup(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_MTD_UCLINUX
|
#ifdef CONFIG_MTD_UCLINUX
|
||||||
unsigned long mtd_phys = 0;
|
unsigned long mtd_phys = 0;
|
||||||
|
unsigned long n;
|
||||||
#endif
|
#endif
|
||||||
unsigned long max_mem;
|
unsigned long max_mem;
|
||||||
|
|
||||||
|
@ -593,9 +594,9 @@ static __init void memory_setup(void)
|
||||||
mtd_size = PAGE_ALIGN(*((unsigned long *)(mtd_phys + 8)));
|
mtd_size = PAGE_ALIGN(*((unsigned long *)(mtd_phys + 8)));
|
||||||
|
|
||||||
# if defined(CONFIG_EXT2_FS) || defined(CONFIG_EXT3_FS)
|
# if defined(CONFIG_EXT2_FS) || defined(CONFIG_EXT3_FS)
|
||||||
if (*((unsigned short *)(mtd_phys + 0x438)) == EXT2_SUPER_MAGIC)
|
n = ext2_image_size((void *)(mtd_phys + 0x400));
|
||||||
mtd_size =
|
if (n)
|
||||||
PAGE_ALIGN(*((unsigned long *)(mtd_phys + 0x404)) << 10);
|
mtd_size = PAGE_ALIGN(n * 1024);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if defined(CONFIG_CRAMFS)
|
# if defined(CONFIG_CRAMFS)
|
||||||
|
|
|
@ -536,4 +536,26 @@ enum {
|
||||||
~EXT2_DIR_ROUND)
|
~EXT2_DIR_ROUND)
|
||||||
#define EXT2_MAX_REC_LEN ((1<<16)-1)
|
#define EXT2_MAX_REC_LEN ((1<<16)-1)
|
||||||
|
|
||||||
|
#define EXT2_SB_MAGIC_OFFSET 0x38
|
||||||
|
#define EXT2_SB_BLOCKS_OFFSET 0x04
|
||||||
|
#define EXT2_SB_BSIZE_OFFSET 0x18
|
||||||
|
|
||||||
|
static inline u64 ext2_image_size(void *ext2_sb)
|
||||||
|
{
|
||||||
|
__u8 *p = ext2_sb;
|
||||||
|
if (*(__le16 *)(p + EXT2_SB_MAGIC_OFFSET) != cpu_to_le16(EXT2_SUPER_MAGIC))
|
||||||
|
return 0;
|
||||||
|
return (u64)le32_to_cpup((__le32 *)(p + EXT2_SB_BLOCKS_OFFSET)) <<
|
||||||
|
le32_to_cpup((__le32 *)(p + EXT2_SB_BSIZE_OFFSET));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void verify_offsets(void)
|
||||||
|
{
|
||||||
|
#define A(x,y) BUILD_BUG_ON(x != offsetof(struct ext2_super_block, y));
|
||||||
|
A(EXT2_SB_MAGIC_OFFSET, s_magic);
|
||||||
|
A(EXT2_SB_BLOCKS_OFFSET, s_blocks_count);
|
||||||
|
A(EXT2_SB_BSIZE_OFFSET, s_log_block_size);
|
||||||
|
#undef A
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _LINUX_EXT2_FS_H */
|
#endif /* _LINUX_EXT2_FS_H */
|
||||||
|
|
|
@ -54,20 +54,19 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor)
|
||||||
{
|
{
|
||||||
const int size = 512;
|
const int size = 512;
|
||||||
struct minix_super_block *minixsb;
|
struct minix_super_block *minixsb;
|
||||||
struct ext2_super_block *ext2sb;
|
|
||||||
struct romfs_super_block *romfsb;
|
struct romfs_super_block *romfsb;
|
||||||
struct cramfs_super *cramfsb;
|
struct cramfs_super *cramfsb;
|
||||||
struct squashfs_super_block *squashfsb;
|
struct squashfs_super_block *squashfsb;
|
||||||
int nblocks = -1;
|
int nblocks = -1;
|
||||||
unsigned char *buf;
|
unsigned char *buf;
|
||||||
const char *compress_name;
|
const char *compress_name;
|
||||||
|
unsigned long n;
|
||||||
|
|
||||||
buf = kmalloc(size, GFP_KERNEL);
|
buf = kmalloc(size, GFP_KERNEL);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
minixsb = (struct minix_super_block *) buf;
|
minixsb = (struct minix_super_block *) buf;
|
||||||
ext2sb = (struct ext2_super_block *) buf;
|
|
||||||
romfsb = (struct romfs_super_block *) buf;
|
romfsb = (struct romfs_super_block *) buf;
|
||||||
cramfsb = (struct cramfs_super *) buf;
|
cramfsb = (struct cramfs_super *) buf;
|
||||||
squashfsb = (struct squashfs_super_block *) buf;
|
squashfsb = (struct squashfs_super_block *) buf;
|
||||||
|
@ -150,12 +149,12 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Try ext2 */
|
/* Try ext2 */
|
||||||
if (ext2sb->s_magic == cpu_to_le16(EXT2_SUPER_MAGIC)) {
|
n = ext2_image_size(buf);
|
||||||
|
if (n) {
|
||||||
printk(KERN_NOTICE
|
printk(KERN_NOTICE
|
||||||
"RAMDISK: ext2 filesystem found at block %d\n",
|
"RAMDISK: ext2 filesystem found at block %d\n",
|
||||||
start_block);
|
start_block);
|
||||||
nblocks = le32_to_cpu(ext2sb->s_blocks_count) <<
|
nblocks = n;
|
||||||
le32_to_cpu(ext2sb->s_log_block_size);
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue