From: Karel Zak Date: Mon, 11 Jan 2021 10:58:16 +0000 (+0100) Subject: libblkid: make gfs2 prober more extendible X-Git-Tag: v2.37-rc1~189 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a7d5efbb9ae8591b8ebcd3756a59ce30a36d80fc;p=thirdparty%2Futil-linux.git libblkid: make gfs2 prober more extendible The current GFS2 prober hard codes superblock constants, but these constants are affected by GFS2 development. Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1913844 Signed-off-by: Karel Zak --- diff --git a/libblkid/src/superblocks/gfs.c b/libblkid/src/superblocks/gfs.c index e22a6a3f95..37a74b157f 100644 --- a/libblkid/src/superblocks/gfs.c +++ b/libblkid/src/superblocks/gfs.c @@ -18,9 +18,6 @@ /* gfs1 constants: */ #define GFS_FORMAT_FS 1309 #define GFS_FORMAT_MULTI 1401 -/* gfs2 constants: */ -#define GFS2_FORMAT_FS 1801 -#define GFS2_FORMAT_MULTI 1900 struct gfs2_meta_header { uint32_t mh_magic; @@ -58,6 +55,8 @@ struct gfs2_sb { uint8_t sb_uuid[16]; /* The UUID maybe 0 for backwards compat */ } __attribute__((packed)); + + static int probe_gfs(blkid_probe pr, const struct blkid_idmag *mag) { struct gfs2_sb *sbd; @@ -81,6 +80,15 @@ static int probe_gfs(blkid_probe pr, const struct blkid_idmag *mag) return 1; } +static inline int gfs2_format_is_valid(uint32_t format) +{ + return (format >= 1800 && format < 1900); +} +static inline int gfs2_multiformat_is_valid(uint32_t multi) +{ + return (multi >= 1900 && multi < 2000); +} + static int probe_gfs2(blkid_probe pr, const struct blkid_idmag *mag) { struct gfs2_sb *sbd; @@ -89,8 +97,8 @@ static int probe_gfs2(blkid_probe pr, const struct blkid_idmag *mag) if (!sbd) return errno ? -errno : 1; - if (be32_to_cpu(sbd->sb_fs_format) == GFS2_FORMAT_FS && - be32_to_cpu(sbd->sb_multihost_format) == GFS2_FORMAT_MULTI) + if (gfs2_format_is_valid(be32_to_cpu(sbd->sb_fs_format)) && + gfs2_multiformat_is_valid(be32_to_cpu(sbd->sb_multihost_format))) { if (*sbd->sb_locktable) blkid_probe_set_label(pr,