+ uint32_t clusters_max;
+ uint32_t fat_sectors;
+
+ clusters_max = get_volume_size() / get_cluster_size();
+ fat_sectors = DIV_ROUND_UP((off_t) clusters_max * sizeof(cluster_t),
+ get_sector_size());
+
+ memset(sb, 0, sizeof(struct exfat_super_block));
+ sb->jump[0] = 0xeb;
+ sb->jump[1] = 0x76;
+ sb->jump[2] = 0x90;
+ memcpy(sb->oem_name, "EXFAT ", sizeof(sb->oem_name));
+ sb->sector_start = cpu_to_le64(get_first_sector());
+ sb->sector_count = cpu_to_le64(get_volume_size() / get_sector_size());
+ sb->fat_sector_start = cpu_to_le32(
+ fat.get_alignment() / get_sector_size());
+ sb->fat_sector_count = cpu_to_le32(ROUND_UP(
+ le32_to_cpu(sb->fat_sector_start) + fat_sectors,
+ 1 << get_spc_bits()) -
+ le32_to_cpu(sb->fat_sector_start));
+ sb->cluster_sector_start = cpu_to_le32(
+ get_position(&cbm) / get_sector_size());
+ sb->cluster_count = cpu_to_le32(clusters_max -
+ ((le32_to_cpu(sb->fat_sector_start) +
+ le32_to_cpu(sb->fat_sector_count)) >> get_spc_bits()));
+ sb->rootdir_cluster = cpu_to_le32(
+ (get_position(&rootdir) - get_position(&cbm)) / get_cluster_size()
+ + EXFAT_FIRST_DATA_CLUSTER);
+ sb->volume_serial = cpu_to_le32(get_volume_serial());
+ sb->version.major = 1;
+ sb->version.minor = 0;
+ sb->volume_state = cpu_to_le16(0);
+ sb->sector_bits = get_sector_bits();
+ sb->spc_bits = get_spc_bits();
+ sb->fat_count = 1;
+ sb->drive_no = 0x80;
+ sb->allocated_percent = 0;
+ sb->boot_signature = cpu_to_le16(0xaa55);
+}
+
+static int vbr_write(struct exfat_dev* dev)
+{
+ struct exfat_super_block sb;