aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/ext2_fs.h
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-03-23 16:36:45 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2012-03-31 16:03:16 -0400
commit39429c5e4a2c56a39c9a1c9bdad54431c63104b0 (patch)
tree06abc2a4ff8d323b0358b768a71c7b651c3229f3 /include/linux/ext2_fs.h
parent2f99c36986ff27a86f06f27212c5f5fa8c7164a3 (diff)
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>
Diffstat (limited to 'include/linux/ext2_fs.h')
-rw-r--r--include/linux/ext2_fs.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/include/linux/ext2_fs.h b/include/linux/ext2_fs.h
index f28dba518a4a..5f65ec75b48a 100644
--- a/include/linux/ext2_fs.h
+++ b/include/linux/ext2_fs.h
@@ -536,4 +536,26 @@ enum {
536 ~EXT2_DIR_ROUND) 536 ~EXT2_DIR_ROUND)
537#define EXT2_MAX_REC_LEN ((1<<16)-1) 537#define EXT2_MAX_REC_LEN ((1<<16)-1)
538 538
539#define EXT2_SB_MAGIC_OFFSET 0x38
540#define EXT2_SB_BLOCKS_OFFSET 0x04
541#define EXT2_SB_BSIZE_OFFSET 0x18
542
543static inline u64 ext2_image_size(void *ext2_sb)
544{
545 __u8 *p = ext2_sb;
546 if (*(__le16 *)(p + EXT2_SB_MAGIC_OFFSET) != cpu_to_le16(EXT2_SUPER_MAGIC))
547 return 0;
548 return (u64)le32_to_cpup((__le32 *)(p + EXT2_SB_BLOCKS_OFFSET)) <<
549 le32_to_cpup((__le32 *)(p + EXT2_SB_BSIZE_OFFSET));
550}
551
552static inline void verify_offsets(void)
553{
554#define A(x,y) BUILD_BUG_ON(x != offsetof(struct ext2_super_block, y));
555 A(EXT2_SB_MAGIC_OFFSET, s_magic);
556 A(EXT2_SB_BLOCKS_OFFSET, s_blocks_count);
557 A(EXT2_SB_BSIZE_OFFSET, s_log_block_size);
558#undef A
559}
560
539#endif /* _LINUX_EXT2_FS_H */ 561#endif /* _LINUX_EXT2_FS_H */