diff options
-rw-r--r-- | include/bb_e2fs_defs.h | 33 | ||||
-rw-r--r-- | util-linux/volume_id/ext.c | 74 |
2 files changed, 35 insertions, 72 deletions
diff --git a/include/bb_e2fs_defs.h b/include/bb_e2fs_defs.h index 7974497ca..071c660c5 100644 --- a/include/bb_e2fs_defs.h +++ b/include/bb_e2fs_defs.h | |||
@@ -463,6 +463,7 @@ struct ext2_super_block { | |||
463 | #define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \ | 463 | #define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \ |
464 | ( EXT2_SB(sb)->s_feature_incompat & (mask) ) | 464 | ( EXT2_SB(sb)->s_feature_incompat & (mask) ) |
465 | 465 | ||
466 | /* for s_feature_compat */ | ||
466 | #define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001 | 467 | #define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001 |
467 | #define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002 | 468 | #define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002 |
468 | #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 | 469 | #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 |
@@ -470,23 +471,45 @@ struct ext2_super_block { | |||
470 | #define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010 | 471 | #define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010 |
471 | #define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020 | 472 | #define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020 |
472 | 473 | ||
474 | /* for s_feature_ro_compat */ | ||
473 | #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 | 475 | #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 |
474 | #define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 | 476 | #define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 |
475 | /* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 not used */ | 477 | #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 /* not used */ |
478 | #define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008 | ||
479 | #define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010 | ||
480 | #define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020 | ||
481 | #define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040 | ||
476 | 482 | ||
483 | /* for s_feature_incompat */ | ||
477 | #define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001 | 484 | #define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001 |
478 | #define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 | 485 | #define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 |
479 | #define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */ | 486 | #define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 |
480 | #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */ | 487 | #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 |
481 | #define EXT2_FEATURE_INCOMPAT_META_BG 0x0010 | 488 | #define EXT2_FEATURE_INCOMPAT_META_BG 0x0010 |
482 | #define EXT3_FEATURE_INCOMPAT_EXTENTS 0x0040 | 489 | #define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 |
490 | #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 | ||
491 | #define EXT4_FEATURE_INCOMPAT_MMP 0x0100 | ||
492 | #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 | ||
483 | 493 | ||
484 | 494 | ||
485 | #define EXT2_FEATURE_COMPAT_SUPP 0 | 495 | #define EXT2_FEATURE_COMPAT_SUPP 0 |
486 | #define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE) | ||
487 | #define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ | 496 | #define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ |
488 | EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ | 497 | EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ |
489 | EXT2_FEATURE_RO_COMPAT_BTREE_DIR) | 498 | EXT2_FEATURE_RO_COMPAT_BTREE_DIR) |
499 | #define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ | ||
500 | EXT2_FEATURE_INCOMPAT_META_BG) | ||
501 | #define EXT2_FEATURE_INCOMPAT_UNSUPPORTED (~EXT2_FEATURE_INCOMPAT_SUPP) | ||
502 | #define EXT2_FEATURE_RO_COMPAT_UNSUPPORTED (~EXT2_FEATURE_RO_COMPAT_SUPP) | ||
503 | |||
504 | #define EXT3_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ | ||
505 | EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ | ||
506 | EXT2_FEATURE_RO_COMPAT_BTREE_DIR) | ||
507 | #define EXT3_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ | ||
508 | EXT3_FEATURE_INCOMPAT_RECOVER| \ | ||
509 | EXT2_FEATURE_INCOMPAT_META_BG) | ||
510 | #define EXT3_FEATURE_INCOMPAT_UNSUPPORTED (~EXT3_FEATURE_INCOMPAT_SUPP) | ||
511 | #define EXT3_FEATURE_RO_COMPAT_UNSUPPORTED (~EXT3_FEATURE_RO_COMPAT_SUPP) | ||
512 | |||
490 | 513 | ||
491 | /* | 514 | /* |
492 | * Default values for user and/or group using reserved blocks | 515 | * Default values for user and/or group using reserved blocks |
diff --git a/util-linux/volume_id/ext.c b/util-linux/volume_id/ext.c index aa23d1ebf..97451067f 100644 --- a/util-linux/volume_id/ext.c +++ b/util-linux/volume_id/ext.c | |||
@@ -19,70 +19,10 @@ | |||
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include "volume_id_internal.h" | 21 | #include "volume_id_internal.h" |
22 | 22 | #include "bb_e2fs_defs.h" | |
23 | struct ext2_super_block { | ||
24 | uint32_t inodes_count; | ||
25 | uint32_t blocks_count; | ||
26 | uint32_t r_blocks_count; | ||
27 | uint32_t free_blocks_count; | ||
28 | uint32_t free_inodes_count; | ||
29 | uint32_t first_data_block; | ||
30 | uint32_t log_block_size; | ||
31 | uint32_t dummy3[7]; | ||
32 | uint8_t magic[2]; | ||
33 | uint16_t state; | ||
34 | uint32_t dummy5[8]; | ||
35 | uint32_t feature_compat; | ||
36 | uint32_t feature_incompat; | ||
37 | uint32_t feature_ro_compat; | ||
38 | uint8_t uuid[16]; | ||
39 | uint8_t volume_name[16]; | ||
40 | } PACKED; | ||
41 | 23 | ||
42 | #define EXT_SUPERBLOCK_OFFSET 0x400 | 24 | #define EXT_SUPERBLOCK_OFFSET 0x400 |
43 | 25 | ||
44 | /* for s_flags */ | ||
45 | #define EXT2_FLAGS_TEST_FILESYS 0x0004 | ||
46 | |||
47 | /* for s_feature_compat */ | ||
48 | #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 | ||
49 | |||
50 | /* for s_feature_ro_compat */ | ||
51 | #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 | ||
52 | #define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 | ||
53 | #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 | ||
54 | #define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008 | ||
55 | #define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010 | ||
56 | #define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020 | ||
57 | #define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040 | ||
58 | |||
59 | /* for s_feature_incompat */ | ||
60 | #define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 | ||
61 | #define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 | ||
62 | #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 | ||
63 | #define EXT2_FEATURE_INCOMPAT_META_BG 0x0010 | ||
64 | #define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* extents support */ | ||
65 | #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 | ||
66 | #define EXT4_FEATURE_INCOMPAT_MMP 0x0100 | ||
67 | #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 | ||
68 | |||
69 | #define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ | ||
70 | EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ | ||
71 | EXT2_FEATURE_RO_COMPAT_BTREE_DIR) | ||
72 | #define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ | ||
73 | EXT2_FEATURE_INCOMPAT_META_BG) | ||
74 | #define EXT2_FEATURE_INCOMPAT_UNSUPPORTED ~EXT2_FEATURE_INCOMPAT_SUPP | ||
75 | #define EXT2_FEATURE_RO_COMPAT_UNSUPPORTED ~EXT2_FEATURE_RO_COMPAT_SUPP | ||
76 | |||
77 | #define EXT3_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ | ||
78 | EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ | ||
79 | EXT2_FEATURE_RO_COMPAT_BTREE_DIR) | ||
80 | #define EXT3_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ | ||
81 | EXT3_FEATURE_INCOMPAT_RECOVER| \ | ||
82 | EXT2_FEATURE_INCOMPAT_META_BG) | ||
83 | #define EXT3_FEATURE_INCOMPAT_UNSUPPORTED ~EXT3_FEATURE_INCOMPAT_SUPP | ||
84 | #define EXT3_FEATURE_RO_COMPAT_UNSUPPORTED ~EXT3_FEATURE_RO_COMPAT_SUPP | ||
85 | |||
86 | int FAST_FUNC volume_id_probe_ext(struct volume_id *id /*,uint64_t off*/) | 26 | int FAST_FUNC volume_id_probe_ext(struct volume_id *id /*,uint64_t off*/) |
87 | { | 27 | { |
88 | #define off ((uint64_t)0) | 28 | #define off ((uint64_t)0) |
@@ -94,24 +34,24 @@ int FAST_FUNC volume_id_probe_ext(struct volume_id *id /*,uint64_t off*/) | |||
94 | if (es == NULL) | 34 | if (es == NULL) |
95 | return -1; | 35 | return -1; |
96 | 36 | ||
97 | if (es->magic[0] != 0123 || es->magic[1] != 0357) { | 37 | if (es->s_magic != cpu_to_le16(EXT2_SUPER_MAGIC)) { |
98 | dbg("ext: no magic found"); | 38 | dbg("ext: no magic found"); |
99 | return -1; | 39 | return -1; |
100 | } | 40 | } |
101 | 41 | ||
102 | // volume_id_set_usage(id, VOLUME_ID_FILESYSTEM); | 42 | // volume_id_set_usage(id, VOLUME_ID_FILESYSTEM); |
103 | // volume_id_set_label_raw(id, es->volume_name, 16); | 43 | // volume_id_set_label_raw(id, es->volume_name, 16); |
104 | volume_id_set_label_string(id, es->volume_name, 16); | 44 | volume_id_set_label_string(id, (void*)es->s_volume_name, 16); |
105 | volume_id_set_uuid(id, es->uuid, UUID_DCE); | 45 | volume_id_set_uuid(id, es->s_uuid, UUID_DCE); |
106 | dbg("ext: label '%s' uuid '%s'", id->label, id->uuid); | 46 | dbg("ext: label '%s' uuid '%s'", id->label, id->uuid); |
107 | 47 | ||
108 | #if ENABLE_FEATURE_BLKID_TYPE | 48 | #if ENABLE_FEATURE_BLKID_TYPE |
109 | if ((es->feature_ro_compat & cpu_to_le32(EXT4_FEATURE_RO_COMPAT_HUGE_FILE | EXT4_FEATURE_RO_COMPAT_DIR_NLINK)) | 49 | if ((es->s_feature_ro_compat & cpu_to_le32(EXT4_FEATURE_RO_COMPAT_HUGE_FILE | EXT4_FEATURE_RO_COMPAT_DIR_NLINK)) |
110 | || (es->feature_incompat & cpu_to_le32(EXT4_FEATURE_INCOMPAT_EXTENTS | EXT4_FEATURE_INCOMPAT_64BIT)) | 50 | || (es->s_feature_incompat & cpu_to_le32(EXT4_FEATURE_INCOMPAT_EXTENTS | EXT4_FEATURE_INCOMPAT_64BIT)) |
111 | ) { | 51 | ) { |
112 | id->type = "ext4"; | 52 | id->type = "ext4"; |
113 | } | 53 | } |
114 | else if (es->feature_compat & cpu_to_le32(EXT3_FEATURE_COMPAT_HAS_JOURNAL)) | 54 | else if (es->s_feature_compat & cpu_to_le32(EXT3_FEATURE_COMPAT_HAS_JOURNAL)) |
115 | id->type = "ext3"; | 55 | id->type = "ext3"; |
116 | else | 56 | else |
117 | id->type = "ext2"; | 57 | id->type = "ext2"; |