From da91337a8109beb461c889ffe32701d3cb95aee2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20Wei=C3=9Fschuh?= Date: Tue, 26 Sep 2023 09:43:35 +0200 Subject: [PATCH] libblkid: (bcachefs) add support for sub-device labels MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Weißschuh --- libblkid/src/superblocks/bcache.c | 31 +++++++++++++++++++++ tests/expected/blkid/low-probe-bcachefs-2 | 8 ++++-- tests/ts/blkid/images-fs/bcachefs-2.img.xz | Bin 988 -> 1000 bytes 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/libblkid/src/superblocks/bcache.c b/libblkid/src/superblocks/bcache.c index 0f7ddd220d..f6f34bbad6 100644 --- a/libblkid/src/superblocks/bcache.c +++ b/libblkid/src/superblocks/bcache.c @@ -89,6 +89,16 @@ struct bcachefs_sb_field_members { struct bcachefs_sb_member members[]; } __attribute__((packed)); +struct bcachefs_sb_disk_group { + uint8_t label[SB_LABEL_SIZE]; + uint64_t flags[2]; +} __attribute__((packed)); + +struct bcachefs_sb_field_disk_groups { + struct bcachefs_sb_field field; + struct bcachefs_sb_disk_group disk_groups[]; +} __attribute__((packed)); + enum bcachefs_sb_csum_type { BCACHEFS_SB_CSUM_TYPE_NONE = 0, BCACHEFS_SB_CSUM_TYPE_CRC32C = 1, @@ -160,6 +170,8 @@ struct bcachefs_super_block { #define BCACHEFS_SB_FIELDS_OFF offsetof(struct bcachefs_super_block, _start) /* tag value for members field */ #define BCACHEFS_SB_FIELD_TYPE_MEMBERS 1 +/* tag value for disk_groups field */ +#define BCACHEFS_SB_FIELD_TYPE_DISK_GROUPS 5 /* version splitting helpers */ #define BCH_VERSION_MAJOR(_v) ((uint16_t) ((_v) >> 10)) #define BCH_VERSION_MINOR(_v) ((uint16_t) ((_v) & ~(~0U << 10))) @@ -238,6 +250,22 @@ static void probe_bcachefs_sb_members(blkid_probe pr, blkid_probe_set_fssize(pr, sectors * BCACHEFS_SECTOR_SIZE); } +static void probe_bcachefs_sb_disk_groups(blkid_probe pr, + const struct bcachefs_super_block *bcs, + const struct bcachefs_sb_field *field, + uint8_t dev_idx) +{ + struct bcachefs_sb_field_disk_groups *disk_groups = + (struct bcachefs_sb_field_disk_groups *) field; + + if (BYTES(field) != offsetof(typeof(*disk_groups), disk_groups[bcs->nr_devices])) + return; + + blkid_probe_set_id_label(pr, "LABEL_SUB", + disk_groups->disk_groups[dev_idx].label, + sizeof(disk_groups->disk_groups[dev_idx].label)); +} + static int is_within_range(const void *start, uint64_t size, const void *end) { ptrdiff_t diff; @@ -277,6 +305,9 @@ static void probe_bcachefs_sb_fields(blkid_probe pr, const struct bcachefs_super if (type == BCACHEFS_SB_FIELD_TYPE_MEMBERS) probe_bcachefs_sb_members(pr, bcs, field, bcs->dev_idx); + if (type == BCACHEFS_SB_FIELD_TYPE_DISK_GROUPS) + probe_bcachefs_sb_disk_groups(pr, bcs, field, bcs->dev_idx); + field_addr += BYTES(field); } } diff --git a/tests/expected/blkid/low-probe-bcachefs-2 b/tests/expected/blkid/low-probe-bcachefs-2 index b6e220ea0a..8e10469cf8 100644 --- a/tests/expected/blkid/low-probe-bcachefs-2 +++ b/tests/expected/blkid/low-probe-bcachefs-2 @@ -3,10 +3,12 @@ ID_FS_FSBLOCKSIZE=512 ID_FS_FSSIZE=4194304 ID_FS_LABEL=Label ID_FS_LABEL_ENC=Label +ID_FS_LABEL_SUB=Device_Label +ID_FS_LABEL_SUB_ENC=Device\x20Label ID_FS_TYPE=bcachefs ID_FS_USAGE=filesystem ID_FS_UUID=4fa11b1e-75e6-4210-9167-34e1769c0fe1 ID_FS_UUID_ENC=4fa11b1e-75e6-4210-9167-34e1769c0fe1 -ID_FS_UUID_SUB=0a3643b7-c515-47f8-a0ea-91fc38d043d1 -ID_FS_UUID_SUB_ENC=0a3643b7-c515-47f8-a0ea-91fc38d043d1 -ID_FS_VERSION=0.26 +ID_FS_UUID_SUB=525fa857-174a-4d3f-be33-6fe60441de7c +ID_FS_UUID_SUB_ENC=525fa857-174a-4d3f-be33-6fe60441de7c +ID_FS_VERSION=0.24 diff --git a/tests/ts/blkid/images-fs/bcachefs-2.img.xz b/tests/ts/blkid/images-fs/bcachefs-2.img.xz index e796c974cbc90c349d649911e48804773b91f5d9..267df3f3ee36e0793c69bca5af2712560a55caf6 100644 GIT binary patch delta 574 zc-jFz0>S;<2j~Zo906aE9UOm7PS{R=;|352DBDZqOSFCA8g5&T?UC91ZNw=;Lj#x4 zHH2cTrmsy_e;MGRw}=$L3A%kP(;GdXG6`$nl4rj!^QcB?o3Plw#Or)QG7Nif$rHKz zPKsJdu2NMG zWdvYCE)vFm(&j~%dExfnnRvpU5HS&~PC?v^s4nciUO4Lk3m3*X!0Q{?RuV#5oKpTR z@)23ovIg@!!ONQ13LLz}`CEm`dOj?oGYe#n?kagztVm)xabT2P0wNj*x~BFww*8r4 z(t~MPq)Z=2|NgB7Va-H8STLaG%Un$x)K_zDrs2r`c_Fo^Gmm0~eOggsl5|O2#BH*Y z=b*^W2L$e)-lamzh(BBakI+u9CMc9~A3cvG;c%Xl90NIRu93b(&HX{!Phq|_FbYZ^ zy-8wXp&;zpNk>@2B26(HJ6dk07N)7X-k}U4?Jb6ay>|&~+}IZ=lnFomA6=|%;x@66 zBwmZb^l=9L*spV*tahSWR3k|Cb*G^EnTO)M8EM%eN?C>KiTx|yGLwMHj_lIsdalXC(-2QWWjk52T^lNJG06#b#>ercPm9EbKuyE>lNOxGiT zos%yEdy{|x4m0qJcvFA?l>h|*7Gei50000008>u@%tR<+W&i=f2Y`Tp0sxU9aj*Ms#5@BYY^B3f(`CMfiRUM z8>iC8u+c;T=EsE51=-fp*Op$wJzveS>)V+Z z1y4R;31h(1O%_W3fOgVdajMSh6nL(t;KPg{g^BJBgeV^$DncT!71VX9ynFd6*a%ZZ zR`llqvC~x`e-^-yHzI!L zL3YU1u(a6(u4p0gEi@(%@TMvL^!Vm<_mkO}k%0IkbkM7puH8cR4?as~Kq=a?+|`vM zw_vZtJv>k#LiycOJ(K1I+`zUg+V9X+R$egZxmNkOfE zz#*j3bh3wjaYk_nBLQs_S2Rx^pT4eqlOX~?54lu4`?l63c7?qc=1P3`lY0R