Write zone metadata in a single write()

This commit is contained in:
Tom Marshall 2019-11-14 13:58:30 +01:00
parent 6e92d5071a
commit 2e5bbb95b4
1 changed files with 8 additions and 11 deletions

View File

@ -36,7 +36,8 @@ cbd_format(const char* dev,
uint pblk_size;
uint lblk_size;
struct cbd_header header;
uint8_t buf[PAGE_SIZE];
uint8_t header_buf[PAGE_SIZE];
uint8_t* data_buf;
uint64_t pblk;
uint64_t zone_idx;
@ -132,26 +133,22 @@ cbd_format(const char* dev,
printf(" nr_zones=%lu\n", (unsigned long)header.params.nr_zones);
printf(" lblk_per_zone=%lu\n", (unsigned long)header.params.lblk_per_zone);
memset(buf, 0, sizeof(buf));
cbd_header_put(buf, &header);
memset(header_buf, 0, sizeof(header_buf));
cbd_header_put(header_buf, &header);
pblk = 0;
pblk_write(devfd, pblk_size, pblk, 1, buf);
pblk_write(devfd, pblk_size, pblk, 1, header_buf);
pblk += CBD_HEADER_BLOCKS;
printf("Writing %lu zones ...\n",
(unsigned long)header.params.nr_zones);
memset(buf, 0, sizeof(buf));
data_buf = calloc(zone_metadata_len(&header.params), PAGE_SIZE);
for (zone_idx = 0; zone_idx < header.params.nr_zones; ++zone_idx) {
uint32_t count;
uint32_t n;
pblk = zone_off(&header.params, zone_idx);
count = zone_metadata_len(&header.params);
for (n = 0; n < count; ++n) {
pblk_write(devfd, pblk_size, pblk + n, 1, buf);
}
pblk_write(devfd, pblk_size, pblk, zone_metadata_len(&header.params), data_buf);
}
free(data_buf);
return 0;
}