diff options
| author | Grzegorz Kostka <kostka.grzegorz@gmail.com> | 2018-03-01 19:51:06 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-01 19:51:06 +0100 |
| commit | 71d088e6525e637279a46c2bb0f01e34c3a72f4a (patch) | |
| tree | f521d67e225e412c42a90f00e4c06c8aa684cd45 | |
| parent | 2d9c5b5d776dcaa543b4a37f738617dfca64fff1 (diff) | |
| parent | de16b0f8bcb8b9c49811e1dcab476e0271e6cc39 (diff) | |
Merge pull request #34 from mmmaisel/master
Fix: ext4-mkfs and ext4-mbr-write use wrong partition size in case of multiple partitions
| -rw-r--r-- | src/ext4_mbr.c | 8 | ||||
| -rw-r--r-- | src/ext4_mkfs.c | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/src/ext4_mbr.c b/src/ext4_mbr.c index 7cbbe89..14fe252 100644 --- a/src/ext4_mbr.c +++ b/src/ext4_mbr.c @@ -129,7 +129,7 @@ int ext4_mbr_scan(struct ext4_blockdev *parent, struct ext4_mbr_bdevs *bdevs) int ext4_mbr_write(struct ext4_blockdev *parent, struct ext4_mbr_parts *parts) { int r; - uint64_t disk_size = parent->part_size; + uint64_t disk_size; uint32_t division_sum = parts->division[0] + parts->division[1] + parts->division[2] + parts->division[3]; @@ -141,6 +141,8 @@ int ext4_mbr_write(struct ext4_blockdev *parent, struct ext4_mbr_parts *parts) if (r != EOK) return r; + disk_size = parent->part_size; + /*Calculate CHS*/ uint32_t k = 16; while ((k < 256) && ((disk_size / k / 63) > 1024)) @@ -167,7 +169,7 @@ int ext4_mbr_write(struct ext4_blockdev *parent, struct ext4_mbr_parts *parts) if (i == 0) { part_start += 63; - part_size -= 63; + part_size -= 63 * parent->bdif->ph_bsize; } uint32_t cyl_end = cyl_part + cyl_it - 1; @@ -182,7 +184,7 @@ int ext4_mbr_write(struct ext4_blockdev *parent, struct ext4_mbr_parts *parts) mbr->part_entry[i].chs2[2] = cyl_end; mbr->part_entry[i].first_lba = part_start; - mbr->part_entry[i].sectors = part_size; + mbr->part_entry[i].sectors = part_size / parent->bdif->ph_bsize; cyl_it += cyl_part; } diff --git a/src/ext4_mkfs.c b/src/ext4_mkfs.c index 5942055..649c272 100644 --- a/src/ext4_mkfs.c +++ b/src/ext4_mkfs.c @@ -709,7 +709,7 @@ int ext4_mkfs(struct ext4_fs *fs, struct ext4_blockdev *bd, bd->fs = fs; if (info->len == 0) - info->len = bd->bdif->ph_bcnt * bd->bdif->ph_bsize; + info->len = bd->part_size; if (info->block_size == 0) info->block_size = 4096; /*Set block size to default value*/ |
