~daniel-mehrmann/e2fsprogs/master

« back to all changes in this revision

Viewing changes to lib/ext2fs/ext2_fs.h

  • Committer: Daniel Mehrmann
  • Date: 2014-12-16 09:16:59 UTC
  • mfrom: (1.2.25)
  • Revision ID: daniel.mehrmann@gmx.de-20141216091659-ymhbl4ualba43vuc
Tags: 1.43-SN-2014-12-16-0ubuntu1
* Merge in snapshot from the maint branch 

Show diffs side-by-side

added added

removed removed

Lines of Context:
192
192
        __u32   bg_reserved;
193
193
};
194
194
 
 
195
#define EXT4_BG_INODE_BITMAP_CSUM_HI_END        \
 
196
        (offsetof(struct ext4_group_desc, bg_inode_bitmap_csum_hi) + \
 
197
         sizeof(__u16))
 
198
#define EXT4_BG_BLOCK_BITMAP_CSUM_HI_LOCATION   \
 
199
        (offsetof(struct ext4_group_desc, bg_block_bitmap_csum_hi) + \
 
200
         sizeof(__u16))
 
201
 
195
202
#define EXT2_BG_INODE_UNINIT    0x0001 /* Inode table/bitmap not initialized */
196
203
#define EXT2_BG_BLOCK_UNINIT    0x0002 /* Block bitmap not initialized */
197
204
#define EXT2_BG_INODE_ZEROED    0x0004 /* On-disk itable initialized to zero */
226
233
#define EXT2_HASH_FLAG_INCOMPAT 0x1
227
234
 
228
235
struct ext2_dx_entry {
229
 
        __u32 hash;
230
 
        __u32 block;
 
236
        __le32 hash;
 
237
        __le32 block;
231
238
};
232
239
 
233
240
struct ext2_dx_countlimit {
234
 
        __u16 limit;
235
 
        __u16 count;
 
241
        __le16 limit;
 
242
        __le16 count;
236
243
};
237
244
 
 
245
/*
 
246
 * This goes at the end of each htree block.
 
247
 */
 
248
struct ext2_dx_tail {
 
249
        __le32 dt_reserved;
 
250
        __le32 dt_checksum;     /* crc32c(uuid+inum+dxblock) */
 
251
};
238
252
 
239
253
/*
240
254
 * Macro-instructions used to manage group descriptors
310
324
#define EXT4_SNAPFILE_FL                0x01000000  /* Inode is a snapshot */
311
325
#define EXT4_SNAPFILE_DELETED_FL        0x04000000  /* Snapshot is being deleted */
312
326
#define EXT4_SNAPFILE_SHRUNK_FL         0x08000000  /* Snapshot shrink has completed */
 
327
#define EXT4_INLINE_DATA_FL             0x10000000 /* Inode has inline data */
313
328
#define EXT2_RESERVED_FL                0x80000000 /* reserved for ext2 lib */
314
329
 
315
330
#define EXT2_FL_USER_VISIBLE            0x004BDFFF /* User visible flags */
459
474
        __u32   i_version_hi;   /* high 32 bits for 64-bit version */
460
475
};
461
476
 
 
477
#define EXT4_INODE_CSUM_HI_EXTRA_END    \
 
478
        (offsetof(struct ext2_inode_large, i_checksum_hi) + sizeof(__u16) - \
 
479
         EXT2_GOOD_OLD_INODE_SIZE)
 
480
 
462
481
#define i_dir_acl       i_size_high
463
482
 
 
483
#define i_checksum_lo   osd2.linux2.l_i_checksum_lo
 
484
 
464
485
#if defined(__KERNEL__) || defined(__linux__)
465
486
#define i_reserved1     osd1.linux1.l_i_reserved1
466
487
#define i_frag          osd2.linux2.l_i_frag
540
561
#define ext4_offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
541
562
#endif
542
563
 
 
564
/* Metadata checksum algorithms */
 
565
#define EXT2_CRC32C_CHKSUM              1
 
566
 
543
567
/*
544
568
 * Structure of the super block
545
569
 */
625
649
        __u64   s_mmp_block;            /* Block for multi-mount protection */
626
650
        __u32   s_raid_stripe_width;    /* blocks on all data disks (N*stride)*/
627
651
        __u8    s_log_groups_per_flex;  /* FLEX_BG group size */
628
 
        __u8    s_reserved_char_pad;
 
652
        __u8    s_checksum_type;        /* metadata checksum algorithm */
629
653
        __u16   s_reserved_pad;         /* Padding to next 32bits */
630
654
        __u64   s_kbytes_written;       /* nr of lifetime kilobytes written */
631
655
        __u32   s_snapshot_inum;        /* Inode number of active snapshot */
715
739
#define EXT4_FEATURE_RO_COMPAT_HAS_SNAPSHOT     0x0080
716
740
#define EXT4_FEATURE_RO_COMPAT_QUOTA            0x0100
717
741
#define EXT4_FEATURE_RO_COMPAT_BIGALLOC         0x0200
 
742
/*
 
743
 * METADATA_CSUM implies GDT_CSUM.  When METADATA_CSUM is set, group
 
744
 * descriptor checksums use the same algorithm as all other data
 
745
 * structures' checksums.
 
746
 */
718
747
#define EXT4_FEATURE_RO_COMPAT_METADATA_CSUM    0x0400
719
748
#define EXT4_FEATURE_RO_COMPAT_REPLICA          0x0800
720
749
 
731
760
#define EXT4_FEATURE_INCOMPAT_DIRDATA           0x1000
732
761
/* 0x2000 was EXT4_FEATURE_INCOMPAT_BG_USE_META_CSUM but this was never used */
733
762
#define EXT4_FEATURE_INCOMPAT_LARGEDIR          0x4000 /* >2GB or 3-lvl htree */
734
 
#define EXT4_FEATURE_INCOMPAT_INLINEDATA        0x8000 /* data in inode */
 
763
#define EXT4_FEATURE_INCOMPAT_INLINE_DATA       0x8000 /* data in inode */
735
764
 
736
765
#define EXT2_FEATURE_COMPAT_SUPP        0
737
766
#define EXT2_FEATURE_INCOMPAT_SUPP    (EXT2_FEATURE_INCOMPAT_FILETYPE| \
781
810
 * stored in intel byte order, and the name_len field could never be
782
811
 * bigger than 255 chars, it's safe to reclaim the extra byte for the
783
812
 * file_type field.
 
813
 *
 
814
 * This structure is deprecated due to endianity issues. Please use struct
 
815
 * ext2_dir_entry and accessor functions
 
816
 *   ext2fs_dirent_name_len
 
817
 *   ext2fs_dirent_set_name_len
 
818
 *   ext2fs_dirent_file_type
 
819
 *   ext2fs_dirent_set_file_type
 
820
 * to get and set name_len and file_type fields.
784
821
 */
785
822
struct ext2_dir_entry_2 {
786
823
        __u32   inode;                  /* Inode number */
791
828
};
792
829
 
793
830
/*
 
831
 * This is a bogus directory entry at the end of each leaf block that
 
832
 * records checksums.
 
833
 */
 
834
struct ext2_dir_entry_tail {
 
835
        __u32   det_reserved_zero1;     /* Pretend to be unused */
 
836
        __u16   det_rec_len;            /* 12 */
 
837
        __u16   det_reserved_name_len;  /* 0xDE00, fake namelen/filetype */
 
838
        __u32   det_checksum;           /* crc32c(uuid+inode+dirent) */
 
839
};
 
840
 
 
841
/*
794
842
 * Ext2 directory file types.  Only the low 3 bits are used.  The
795
843
 * other bits are reserved for now.
796
844
 */
806
854
#define EXT2_FT_MAX             8
807
855
 
808
856
/*
 
857
 * Annoyingly, e2fsprogs always swab16s ext2_dir_entry.name_len, so we
 
858
 * have to build ext2_dir_entry_tail with that assumption too.  This
 
859
 * constant helps to build the dir_entry_tail to look like it has an
 
860
 * "invalid" file type.
 
861
 */
 
862
#define EXT2_DIR_NAME_LEN_CSUM  0xDE00
 
863
 
 
864
/*
809
865
 * EXT2_DIR_PAD defines the directory entries boundaries
810
866
 *
811
867
 * NOTE: It must be a multiple of 4
838
894
#define EXT4_MMP_SEQ_FSCK  0xE24D4D50U /* mmp_seq value when being fscked */
839
895
#define EXT4_MMP_SEQ_MAX   0xE24D4D4FU /* maximum valid mmp_seq value */
840
896
 
 
897
/* Not endian-annotated; it's swapped at read/write time */
841
898
struct mmp_struct {
842
899
        __u32   mmp_magic;              /* Magic number for MMP */
843
900
        __u32   mmp_seq;                /* Sequence no. updated periodically */
846
903
        char    mmp_bdevname[32];       /* Bdev which last updated MMP block */
847
904
        __u16   mmp_check_interval;     /* Changed mmp_check_interval */
848
905
        __u16   mmp_pad1;
849
 
        __u32   mmp_pad2[227];
 
906
        __u32   mmp_pad2[226];
 
907
        __u32   mmp_checksum;           /* crc32c(uuid+mmp_block) */
850
908
};
851
909
 
852
910
/*
864
922
 */
865
923
#define EXT4_MMP_MIN_CHECK_INTERVAL     5
866
924
 
 
925
/*
 
926
 * Minimum size of inline data.
 
927
 */
 
928
#define EXT4_MIN_INLINE_DATA_SIZE       ((sizeof(__u32) * EXT2_N_BLOCKS))
 
929
 
 
930
/*
 
931
 * Size of a parent inode in inline data directory.
 
932
 */
 
933
#define EXT4_INLINE_DATA_DOTDOT_SIZE    (4)
 
934
 
867
935
#endif  /* _LINUX_EXT2_FS_H */