diff mbox

[U-Boot,v2] cmd: gpt: fix the wrong size parse for the last partition

Message ID 1469761938-1728-1-git-send-email-kever.yang@rock-chips.com
State Accepted
Commit c2fdd34569145ad281aeea5ef16fff83d7075830
Delegated to: Tom Rini
Headers show

Commit Message

Kever Yang July 29, 2016, 3:12 a.m. UTC
The calculation of "dev_desc->lba - 34  - 1 - offset" is not correct for
size '-', because both fist_usable_lba and last_usable_lba will remain
34 sectors.

We can simply use 0 for size '-' because the part_efi module will decode
the size and auto extend the size to maximum available size.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
---

Changes in v2:
- fix gpt verify error, do not check the extend partition size

 cmd/gpt.c       | 4 ++--
 disk/part_efi.c | 4 ++++
 2 files changed, 6 insertions(+), 2 deletions(-)

Comments

Kever Yang Aug. 4, 2016, 3:37 a.m. UTC | #1
Hi Michael,

     Do you think this patch is necessary?

Thanks,
-Kever
On 07/29/2016 11:12 AM, Kever Yang wrote:
> The calculation of "dev_desc->lba - 34  - 1 - offset" is not correct for
> size '-', because both fist_usable_lba and last_usable_lba will remain
> 34 sectors.
>
> We can simply use 0 for size '-' because the part_efi module will decode
> the size and auto extend the size to maximum available size.
>
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> ---
>
> Changes in v2:
> - fix gpt verify error, do not check the extend partition size
>
>   cmd/gpt.c       | 4 ++--
>   disk/part_efi.c | 4 ++++
>   2 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/cmd/gpt.c b/cmd/gpt.c
> index 3d9706b..897596a 100644
> --- a/cmd/gpt.c
> +++ b/cmd/gpt.c
> @@ -298,8 +298,8 @@ static int set_gpt_info(struct blk_desc *dev_desc,
>   		if (extract_env(val, &p))
>   			p = val;
>   		if ((strcmp(p, "-") == 0)) {
> -			/* remove first usable lba and last block */
> -			parts[i].size = dev_desc->lba - 34  - 1 - offset;
> +			/* Let part efi module to auto extend the size */
> +			parts[i].size = 0;
>   		} else {
>   			size_ll = ustrtoull(p, &p, 0);
>   			parts[i].size = lldiv(size_ll, dev_desc->blksz);
> diff --git a/disk/part_efi.c b/disk/part_efi.c
> index 0af1e92..4566cab 100644
> --- a/disk/part_efi.c
> +++ b/disk/part_efi.c
> @@ -655,6 +655,10 @@ int gpt_verify_partitions(struct blk_desc *dev_desc,
>   		      (unsigned long long)partitions[i].size);
>   
>   		if (le64_to_cpu(gpt_part_size) != partitions[i].size) {
> +			/* We do not check the extend partition size */
> +			if ((i == parts - 1) && (partitions[i].size == 0))
> +				continue;
> +
>   			error("Partition %s size: %llu does not match %llu!\n",
>   			      efi_str, (unsigned long long)gpt_part_size,
>   			      (unsigned long long)partitions[i].size);
Michael Nazzareno Trimarchi Aug. 4, 2016, 4:56 a.m. UTC | #2
Hi

On Aug 4, 2016 05:38, "Kever Yang" <kever.yang@rock-chips.com> wrote:
>
> Hi Michael,
>
>     Do you think this patch is necessary?
>

Yes, I have checked it and fix the regression. Today I will confirm on hot
correctness but I think too

Michael

> Thanks,
> -Kever
>
> On 07/29/2016 11:12 AM, Kever Yang wrote:
>>
>> The calculation of "dev_desc->lba - 34  - 1 - offset" is not correct for
>> size '-', because both fist_usable_lba and last_usable_lba will remain
>> 34 sectors.
>>
>> We can simply use 0 for size '-' because the part_efi module will decode
>> the size and auto extend the size to maximum available size.
>>
>> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
>> ---
>>
>> Changes in v2:
>> - fix gpt verify error, do not check the extend partition size
>>
>>   cmd/gpt.c       | 4 ++--
>>   disk/part_efi.c | 4 ++++
>>   2 files changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/cmd/gpt.c b/cmd/gpt.c
>> index 3d9706b..897596a 100644
>> --- a/cmd/gpt.c
>> +++ b/cmd/gpt.c
>> @@ -298,8 +298,8 @@ static int set_gpt_info(struct blk_desc *dev_desc,
>>                 if (extract_env(val, &p))
>>                         p = val;
>>                 if ((strcmp(p, "-") == 0)) {
>> -                       /* remove first usable lba and last block */
>> -                       parts[i].size = dev_desc->lba - 34  - 1 - offset;
>> +                       /* Let part efi module to auto extend the size */
>> +                       parts[i].size = 0;
>>                 } else {
>>                         size_ll = ustrtoull(p, &p, 0);
>>                         parts[i].size = lldiv(size_ll, dev_desc->blksz);
>> diff --git a/disk/part_efi.c b/disk/part_efi.c
>> index 0af1e92..4566cab 100644
>> --- a/disk/part_efi.c
>> +++ b/disk/part_efi.c
>> @@ -655,6 +655,10 @@ int gpt_verify_partitions(struct blk_desc *dev_desc,
>>                       (unsigned long long)partitions[i].size);
>>                 if (le64_to_cpu(gpt_part_size) != partitions[i].size) {
>> +                       /* We do not check the extend partition size */
>> +                       if ((i == parts - 1) && (partitions[i].size ==
0))
>> +                               continue;
>> +
>>                         error("Partition %s size: %llu does not match
%llu!\n",
>>                               efi_str, (unsigned long long)gpt_part_size,
>>                               (unsigned long long)partitions[i].size);
>
>
>
Tom Rini Aug. 6, 2016, 1 a.m. UTC | #3
On Fri, Jul 29, 2016 at 11:12:18AM +0800, Kever Yang wrote:

> The calculation of "dev_desc->lba - 34  - 1 - offset" is not correct for
> size '-', because both fist_usable_lba and last_usable_lba will remain
> 34 sectors.
> 
> We can simply use 0 for size '-' because the part_efi module will decode
> the size and auto extend the size to maximum available size.
> 
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/cmd/gpt.c b/cmd/gpt.c
index 3d9706b..897596a 100644
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -298,8 +298,8 @@  static int set_gpt_info(struct blk_desc *dev_desc,
 		if (extract_env(val, &p))
 			p = val;
 		if ((strcmp(p, "-") == 0)) {
-			/* remove first usable lba and last block */
-			parts[i].size = dev_desc->lba - 34  - 1 - offset;
+			/* Let part efi module to auto extend the size */
+			parts[i].size = 0;
 		} else {
 			size_ll = ustrtoull(p, &p, 0);
 			parts[i].size = lldiv(size_ll, dev_desc->blksz);
diff --git a/disk/part_efi.c b/disk/part_efi.c
index 0af1e92..4566cab 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -655,6 +655,10 @@  int gpt_verify_partitions(struct blk_desc *dev_desc,
 		      (unsigned long long)partitions[i].size);
 
 		if (le64_to_cpu(gpt_part_size) != partitions[i].size) {
+			/* We do not check the extend partition size */
+			if ((i == parts - 1) && (partitions[i].size == 0))
+				continue;
+
 			error("Partition %s size: %llu does not match %llu!\n",
 			      efi_str, (unsigned long long)gpt_part_size,
 			      (unsigned long long)partitions[i].size);