summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Kostka <kostka.grzegorz@gmail.com>2018-03-01 19:51:06 +0100
committerGitHub <noreply@github.com>2018-03-01 19:51:06 +0100
commit71d088e6525e637279a46c2bb0f01e34c3a72f4a (patch)
treef521d67e225e412c42a90f00e4c06c8aa684cd45
parent2d9c5b5d776dcaa543b4a37f738617dfca64fff1 (diff)
parentde16b0f8bcb8b9c49811e1dcab476e0271e6cc39 (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.c8
-rw-r--r--src/ext4_mkfs.c2
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*/