in btt.c [970:1020]
static int btt_arena_write_layout(struct arena_info *arena)
{
int ret;
u64 sum;
struct btt_sb *super;
struct nd_btt *nd_btt = arena->nd_btt;
const uuid_t *parent_uuid = nd_dev_to_uuid(&nd_btt->ndns->dev);
ret = btt_map_init(arena);
if (ret)
return ret;
ret = btt_log_init(arena);
if (ret)
return ret;
super = kzalloc(sizeof(struct btt_sb), GFP_NOIO);
if (!super)
return -ENOMEM;
strncpy(super->signature, BTT_SIG, BTT_SIG_LEN);
export_uuid(super->uuid, nd_btt->uuid);
export_uuid(super->parent_uuid, parent_uuid);
super->flags = cpu_to_le32(arena->flags);
super->version_major = cpu_to_le16(arena->version_major);
super->version_minor = cpu_to_le16(arena->version_minor);
super->external_lbasize = cpu_to_le32(arena->external_lbasize);
super->external_nlba = cpu_to_le32(arena->external_nlba);
super->internal_lbasize = cpu_to_le32(arena->internal_lbasize);
super->internal_nlba = cpu_to_le32(arena->internal_nlba);
super->nfree = cpu_to_le32(arena->nfree);
super->infosize = cpu_to_le32(sizeof(struct btt_sb));
super->nextoff = cpu_to_le64(arena->nextoff);
/*
* Subtract arena->infooff (arena start) so numbers are relative
* to 'this' arena
*/
super->dataoff = cpu_to_le64(arena->dataoff - arena->infooff);
super->mapoff = cpu_to_le64(arena->mapoff - arena->infooff);
super->logoff = cpu_to_le64(arena->logoff - arena->infooff);
super->info2off = cpu_to_le64(arena->info2off - arena->infooff);
super->flags = 0;
sum = nd_sb_checksum((struct nd_gen_sb *) super);
super->checksum = cpu_to_le64(sum);
ret = btt_info_write(arena, super);
kfree(super);
return ret;
}