diff --git a/libfdisk/src/context.c b/libfdisk/src/context.c index 363db30f4..327e03b42 100644 --- a/libfdisk/src/context.c +++ b/libfdisk/src/context.c @@ -939,10 +939,21 @@ int fdisk_reread_changes(struct fdisk_context *cxt, struct fdisk_table *org) } } for (i = 0; i < nadds; i++) { + uint64_t sz; + pa = add[i]; + sz = pa->size * ssf; + DBG(PART, ul_debugobj(pa, "#%zu calling BLKPG_ADD_PARTITION", pa->partno)); + + if (fdisk_is_label(cxt, DOS) && fdisk_partition_is_container(pa)) + /* Let's follow the Linux kernel and reduce + * DOS extended partition to 1 or 2 sectors. + */ + sz = min(sz, (uint64_t) 2); + if (partx_add_partition(cxt->dev_fd, pa->partno + 1, - pa->start * ssf, pa->size * ssf) != 0) { + pa->start * ssf, sz) != 0) { fdisk_warn(cxt, _("Failed to add partition %zu to system"), pa->partno + 1); err++; }