aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/bb_e2fs_defs.h33
-rw-r--r--util-linux/volume_id/ext.c74
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"
23struct 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
86int FAST_FUNC volume_id_probe_ext(struct volume_id *id /*,uint64_t off*/) 26int 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";