X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=extras%2Fvolume_id%2Flib%2Fbtrfs.c;h=5ef979f2f07f9c01a55741c65fbf9c721db016d9;hb=14e18278;hp=660e6dab38e42fc46c54968aeccd04fb7f15b625;hpb=0565a00a4cfdabd325bf2e117620d5f15dd46cda;p=elogind.git diff --git a/extras/volume_id/lib/btrfs.c b/extras/volume_id/lib/btrfs.c index 660e6dab3..5ef979f2f 100644 --- a/extras/volume_id/lib/btrfs.c +++ b/extras/volume_id/lib/btrfs.c @@ -42,6 +42,7 @@ struct btrfs_super_block { uint64_t root; uint64_t chunk_root; uint64_t log_root; + uint64_t log_root_transid; uint64_t total_bytes; uint64_t bytes_used; uint64_t root_dir_objectid; @@ -51,6 +52,11 @@ struct btrfs_super_block { uint32_t leafsize; uint32_t stripesize; uint32_t sys_chunk_array_size; + uint64_t chunk_root_generation; + uint64_t compat_flags; + uint64_t compat_ro_flags; + uint64_t incompat_flags; + uint16_t csum_type; uint8_t root_level; uint8_t chunk_root_level; uint8_t log_root_level; @@ -62,10 +68,13 @@ struct btrfs_super_block { uint32_t io_width; uint32_t sector_size; uint64_t type; + uint64_t generation; + uint64_t start_offset; uint32_t dev_group; uint8_t seek_speed; uint8_t bandwidth; uint8_t uuid[16]; + uint8_t fsid[16]; } PACKED dev_item; uint8_t label[256]; } PACKED; @@ -77,13 +86,14 @@ int volume_id_probe_btrfs(struct volume_id *id, uint64_t off, uint64_t size) info("probing at offset 0x%" PRIx64 ", size 0x%" PRIx64 "\n", off, size); - buf = volume_id_get_buffer(id, off + 0x4000, 0x200); + buf = volume_id_get_buffer(id, off + 0x10000, 0x200); if (buf == NULL) return -1; bfs = (struct btrfs_super_block *)buf; - if (memcmp(bfs->magic, "_B9RfS_M", 8) != 0) + if (memcmp(bfs->magic, "_BHRfS_M", 8) != 0) return -1; volume_id_set_uuid(id, bfs->fsid, 0, UUID_DCE); + volume_id_set_uuid_sub(id, bfs->dev_item.uuid, 0, UUID_DCE); volume_id_set_label_raw(id, bfs->label, 256); volume_id_set_label_string(id, bfs->label, 256); volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);