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:
Al Viro
2012-03-23 16:36:45 -04:00
parent 2f99c36986
commit 39429c5e4a
3 changed files with 30 additions and 8 deletions

View File

@@ -536,4 +536,26 @@ enum {
~EXT2_DIR_ROUND)
#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 */