static void get_ext2_info(blkid_dev dev, struct blkid_magic *id, unsigned char *buf) { struct ext2_super_block *es = (struct ext2_super_block *) buf; const char *label = 0; DBG(DEBUG_PROBE, printf("ext2_sb.compat = %08X:%08X:%08X\n", blkid_le32(es->s_feature_compat), blkid_le32(es->s_feature_incompat), blkid_le32(es->s_feature_ro_compat))); if (strlen(es->s_volume_name)) label = es->s_volume_name; blkid_set_tag(dev, "LABEL", label, sizeof(es->s_volume_name)); set_uuid(dev, es->s_uuid, 0); if ((es->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) && !uuid_is_null(es->s_journal_uuid)) set_uuid(dev, es->s_journal_uuid, "EXT_JOURNAL"); if (strcmp(id->bim_type, "ext2") && ((blkid_le32(es->s_feature_incompat) & EXT2_FEATURE_INCOMPAT_UNSUPPORTED) == 0)) blkid_set_tag(dev, "SEC_TYPE", "ext2", sizeof("ext2")); }
static int probe_ext2(struct blkid_probe *probe, struct blkid_magic *id, unsigned char *buf) { struct ext2_super_block *es; es = (struct ext2_super_block *)buf; /* Distinguish between ext3 and ext2 */ if ((blkid_le32(es->s_feature_compat) & EXT3_FEATURE_COMPAT_HAS_JOURNAL)) return -BLKID_ERR_PARAM; /* Any features which ext2 doesn't understand */ if ((blkid_le32(es->s_feature_ro_compat) & EXT2_FEATURE_RO_COMPAT_UNSUPPORTED) || (blkid_le32(es->s_feature_incompat) & EXT2_FEATURE_INCOMPAT_UNSUPPORTED)) return -BLKID_ERR_PARAM; /* * If ext2 is not present, but ext4 or ext4dev are, then * disclaim we are ext2 */ if (!system_supports_ext2() && (system_supports_ext4() || system_supports_ext4dev()) && linux_version_code() >= EXT4_SUPPORTS_EXT2) return -BLKID_ERR_PARAM; get_ext2_info(probe->dev, id, buf); return 0; }
static int probe_ext3(struct blkid_probe *probe, struct blkid_magic *id, unsigned char *buf) { struct ext2_super_block *es; es = (struct ext2_super_block *)buf; /* Distinguish from ext4dev */ if (blkid_le32(es->s_flags) & EXT2_FLAGS_TEST_FILESYS) return -BLKID_ERR_PARAM; /* ext3 requires journal */ if (!(blkid_le32(es->s_feature_compat) & EXT3_FEATURE_COMPAT_HAS_JOURNAL)) return -BLKID_ERR_PARAM; /* Any features which ext3 doesn't understand */ if ((blkid_le32(es->s_feature_ro_compat) & EXT3_FEATURE_RO_COMPAT_UNSUPPORTED) || (blkid_le32(es->s_feature_incompat) & EXT3_FEATURE_INCOMPAT_UNSUPPORTED)) return -BLKID_ERR_PARAM; get_ext2_info(probe->dev, id, buf); return 0; }
static void get_ext2_info(blkid_dev dev, unsigned char *buf) { struct ext2_super_block *es = (struct ext2_super_block *) buf; const char *label = 0; DBG(DEBUG_PROBE, printf("ext2_sb.compat = %08X:%08X:%08X\n", blkid_le32(es->s_feature_compat), blkid_le32(es->s_feature_incompat), blkid_le32(es->s_feature_ro_compat))); if (strlen(es->s_volume_name)) label = es->s_volume_name; blkid_set_tag(dev, "LABEL", label, sizeof(es->s_volume_name)); set_uuid(dev, es->s_uuid); }
static int probe_ext4(struct blkid_probe *probe, struct blkid_magic *id, unsigned char *buf) { struct ext2_super_block *es; es = (struct ext2_super_block *)buf; /* Distinguish from jbd */ if (blkid_le32(es->s_feature_incompat) & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) return -BLKID_ERR_PARAM; /* * If the filesystem does not have a journal and ext2 is not * present, then force this to be detected as an ext2 * filesystem. */ if (!(blkid_le32(es->s_feature_compat) & EXT3_FEATURE_COMPAT_HAS_JOURNAL) && !system_supports_ext2() && system_supports_ext4() && linux_version_code() >= EXT4_SUPPORTS_EXT2) goto force_ext4; /* Ext4 has at least one feature which ext3 doesn't understand */ if (!(blkid_le32(es->s_feature_ro_compat) & EXT3_FEATURE_RO_COMPAT_UNSUPPORTED) && !(blkid_le32(es->s_feature_incompat) & EXT3_FEATURE_INCOMPAT_UNSUPPORTED)) return -BLKID_ERR_PARAM; force_ext4: /* * If the filesystem is a OK for use by in-development * filesystem code, and ext4dev is supported or ext4 is not * supported, then don't call ourselves ext4, so we can redo * the detection and mark the filesystem as ext4dev. * * If the filesystem is marked as in use by production * filesystem, then it can only be used by ext4 and NOT by * ext4dev. */ if (blkid_le32(es->s_flags) & EXT2_FLAGS_TEST_FILESYS) { if (system_supports_ext4dev() || !system_supports_ext4()) return -BLKID_ERR_PARAM; } get_ext2_info(probe->dev, id, buf); return 0; }
static int probe_ext4dev(struct blkid_probe *probe, struct blkid_magic *id, unsigned char *buf) { struct ext2_super_block *es; es = (struct ext2_super_block *)buf; /* Distinguish from jbd */ if (blkid_le32(es->s_feature_incompat) & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) return -BLKID_ERR_PARAM; /* * If the filesystem does not have a journal and ext2 and ext4 * is not present, then force this to be detected as an * ext4dev filesystem. */ if (!(blkid_le32(es->s_feature_compat) & EXT3_FEATURE_COMPAT_HAS_JOURNAL) && !system_supports_ext2() && !system_supports_ext4() && system_supports_ext4dev() && linux_version_code() >= EXT4_SUPPORTS_EXT2) goto force_ext4dev; /* * If the filesystem is marked as OK for use by in-development * filesystem code, but ext4dev is not supported, and ext4 is, * then don't call ourselves ext4dev, since we should be * detected as ext4 in that case. * * If the filesystem is marked as in use by production * filesystem, then it can only be used by ext4 and NOT by * ext4dev, so always disclaim we are ext4dev in that case. */ if (blkid_le32(es->s_flags) & EXT2_FLAGS_TEST_FILESYS) { if (!system_supports_ext4dev() && system_supports_ext4()) return -BLKID_ERR_PARAM; } else return -BLKID_ERR_PARAM; force_ext4dev: get_ext2_info(probe->dev, id, buf); return 0; }
static int probe_jbd(struct blkid_probe *probe, struct blkid_magic *id, unsigned char *buf) { struct ext2_super_block *es = (struct ext2_super_block *) buf; if (!(blkid_le32(es->s_feature_incompat) & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) return -BLKID_ERR_PARAM; get_ext2_info(probe->dev, id, buf); return 0; }
static int probe_ext2(struct blkid_probe *probe, struct blkid_magic *id, unsigned char *buf) { struct ext2_super_block *es; es = (struct ext2_super_block *)buf; /* Distinguish between ext3 and ext2 */ if ((blkid_le32(es->s_feature_compat) & EXT3_FEATURE_COMPAT_HAS_JOURNAL)) return -BLKID_ERR_PARAM; /* Any features which ext2 doesn't understand */ if ((blkid_le32(es->s_feature_ro_compat) & EXT2_FEATURE_RO_COMPAT_UNSUPPORTED) || (blkid_le32(es->s_feature_incompat) & EXT2_FEATURE_INCOMPAT_UNSUPPORTED)) return -BLKID_ERR_PARAM; get_ext2_info(probe->dev, id, buf); return 0; }