return err;
}
+static inline __u32 get_be32(__be32 *p)
+{
+ unsigned char *cp = (unsigned char *) p;
+ __u32 ret;
+
+ ret = *cp++;
+ ret = (ret << 8) + *cp++;
+ ret = (ret << 8) + *cp++;
+ ret = (ret << 8) + *cp++;
+ return ret;
+}
+
static inline unsigned long long read_tag_block(journal_t *journal,
journal_block_tag_t *tag)
{
- unsigned long long block = ext2fs_be32_to_cpu(tag->t_blocknr);
+ unsigned long long block = get_be32(&tag->t_blocknr);
if (jfs_has_feature_64bit(journal))
- block |= (u64)ext2fs_be32_to_cpu(tag->t_blocknr_high) << 32;
+ block |= (u64)get_be32(&tag->t_blocknr_high) << 32;
return block;
}
struct opaque_ext2_group_desc *gdp,
dgrp_t group)
{
- return (struct ext2_group_desc *)((char *)gdp +
- group * EXT2_DESC_SIZE(fs->super));
+ int desc_size = EXT2_DESC_SIZE(fs->super) & ~7;
+
+ return (struct ext2_group_desc *)((char *)gdp + group * desc_size);
}
/* Do the same but as an ext4 group desc for internal use here */
/* this is error case: i_extra_size is too large */
return;
}
+ if (extra_isize & 3)
+ return; /* Illegal inode extra_isize */
inode_size = EXT2_GOOD_OLD_INODE_SIZE + extra_isize;
if (inode_includes(inode_size, i_checksum_hi))