Selaa lähdekoodia

SWUpdate 2020.04: add fix for disk partitions

Signed-off-by: Stefano Babic <sbabic@denx.de>
Stefano Babic 5 vuotta sitten
vanhempi
commit
4c82d83fea

+ 107 - 0
recipes-support/swupdate/swupdate-2020.04/0001-diskpart-fix-adding-more-as-4-partitions.patch

@@ -0,0 +1,107 @@
+From 9b8b498550d4571233fbee6476521c98bc397485 Mon Sep 17 00:00:00 2001
+From: Stefano Babic <sbabic@denx.de>
+Date: Wed, 29 Jul 2020 12:57:59 +0200
+Subject: [PATCH] diskpart: fix adding more as 4 partitions
+
+Signed-off-by: Stefano Babic <sbabic@denx.de>
+---
+ handlers/diskpart_handler.c | 41 +++++++++++++++++++++++++++----------
+ 1 file changed, 30 insertions(+), 11 deletions(-)
+
+diff --git a/handlers/diskpart_handler.c b/handlers/diskpart_handler.c
+index 372412b..be570ca 100644
+--- a/handlers/diskpart_handler.c
++++ b/handlers/diskpart_handler.c
+@@ -21,6 +21,11 @@
+ 
+ void diskpart_handler(void);
+ 
++/*
++ * This is taken from libfdisk to declare if a field is not set
++ */
++#define LIBFDISK_INIT_UNDEF(_x)	((__typeof__(_x)) -1)
++
+ /**
+  * Keys for the properties field in sw-description
+  */
+@@ -71,16 +76,23 @@ static int diskpart_set_partition(struct fdisk_context *cxt,
+ 	unsigned long sector_size = fdisk_get_sector_size(cxt);
+ 	struct fdisk_label *lb;
+ 	struct fdisk_parttype *parttype = NULL;
+-	int ret;
++	int ret = 0;
+ 
+ 	lb = fdisk_get_label(cxt, NULL);
+ 
+ 	if (!sector_size)
+ 		sector_size = 1;
+-	ret = fdisk_partition_set_partno(pa, part->partno) ||
+-	      fdisk_partition_set_size(pa, part->size / sector_size) ||
+-	      fdisk_partition_set_name(pa, part->name) ||
+-	      fdisk_partition_set_start(pa, part->start);
++	fdisk_partition_unset_partno(pa);
++	fdisk_partition_unset_size(pa);
++	fdisk_partition_unset_start(pa);
++	if (part->start != LIBFDISK_INIT_UNDEF(part->start))
++		ret = fdisk_partition_set_start(pa, part->start);
++	if (part->partno != LIBFDISK_INIT_UNDEF(part->partno))
++		ret |= fdisk_partition_set_partno(pa, part->partno);
++	if (strlen(part->name))
++	      ret |= fdisk_partition_set_name(pa, part->name);
++	if (part->size != LIBFDISK_INIT_UNDEF(part->size))
++	      ret |= fdisk_partition_set_size(pa, part->size / sector_size);
+ 
+ 	/*
+ 	 * GPT uses strings instead of hex code for partition type
+@@ -150,6 +162,10 @@ static int diskpart(struct img_type *img,
+ 		}
+ 		elem = LIST_FIRST(parts);
+ 
++		part->partno = LIBFDISK_INIT_UNDEF(part->partno);
++		part->start = LIBFDISK_INIT_UNDEF(part->start);
++		part->size = LIBFDISK_INIT_UNDEF(part->size);
++
+ 		part->partno = strtoul(entry->key  + strlen("partition-"), NULL, 10);
+ 		while (elem) {
+ 			char *equal = index(elem->value, '=');
+@@ -179,10 +195,10 @@ static int diskpart(struct img_type *img,
+ 		}
+ 
+ 		TRACE("partition-%zu:%s size %" PRIu64 " start %zu type %s",
+-			part->partno,
+-			part->name,
+-			part->size,
+-			part->start,
++			part->partno != LIBFDISK_INIT_UNDEF(part->partno) ? part->partno : 0,
++			strlen(part->name) ? part->name : "UNDEF NAME",
++			part->size != LIBFDISK_INIT_UNDEF(part->size) ? part->size : 0,
++			part->start!= LIBFDISK_INIT_UNDEF(part->start) ? part->start : 0,
+ 			part->type);
+ 
+ 		/*
+@@ -253,10 +269,12 @@ static int diskpart(struct img_type *img,
+ 			if (ret) {
+ 				WARN("I cannot set all partition's parameters");
+ 			}
+-			if (fdisk_add_partition(cxt, newpa, &partno) < 0) {
+-				ERROR("I cannot add partition %zu(%s)", part->partno, part->name);
++			if ((ret = fdisk_add_partition(cxt, newpa, &partno)) < 0) {
++				ERROR("I cannot add partition %zu(%s): %d", part->partno, part->name, ret);
+ 			}
+ 			fdisk_unref_partition(newpa);
++			if (ret < 0)
++				goto handler_exit;
+ 		} else {
+ 			ret = diskpart_set_partition(cxt, pa, part);
+ 			if (ret) {
+@@ -267,6 +285,7 @@ static int diskpart(struct img_type *img,
+ 			}
+ 			fdisk_unref_partition(pa);
+ 		}
++		fdisk_reset_partition(pa);
+ 		i++;
+ 	}
+ 
+-- 
+2.25.1
+

+ 3 - 1
recipes-support/swupdate/swupdate_2020.04.bb

@@ -3,7 +3,9 @@ require swupdate.inc
 SRCREV = "1a6dfbb5a0be978ac1a159758e278ab4d44167e2"
 
 SRC_URI += "file://0001-diskpart-force-kernel-to-reread-partition-table.patch \
-	    file://0001-Shellscript-stops-before-completing.patch"
+	    file://0001-Shellscript-stops-before-completing.patch \
+	    file://0001-diskpart-fix-adding-more-as-4-partitions.patch \
+	    "
 
 # Building out of tree is broken in this version
 B = "${S}"