diff mbox

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

Message ID 1469519782-20261-1-git-send-email-kever.yang@rock-chips.com
State Superseded
Delegated to: Tom Rini
Headers show

Commit Message

Kever Yang July 26, 2016, 7:56 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>
---

 cmd/gpt.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Michael Nazzareno Trimarchi July 26, 2016, 8:37 a.m. UTC | #1
Hi

On Tue, Jul 26, 2016 at 9:56 AM, Kever Yang <kever.yang@rock-chips.com> 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>
> ---
>
>  cmd/gpt.c | 4 ++--
>  1 file changed, 2 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;

gpt verify give you success?

Michael

>                 } else {
>                         size_ll = ustrtoull(p, &p, 0);
>                         parts[i].size = lldiv(size_ll, dev_desc->blksz);
> --
> 1.9.1
>
>
Kever Yang July 26, 2016, 8:59 a.m. UTC | #2
Hi Michael,

On 07/26/2016 04:37 PM, Michael Trimarchi wrote:
> Hi
>
> On Tue, Jul 26, 2016 at 9:56 AM, Kever Yang <kever.yang@rock-chips.com> 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>
>> ---
>>
>>   cmd/gpt.c | 4 ++--
>>   1 file changed, 2 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;
> gpt verify give you success?

Yes.

I use below gpt table and "gpt write mmc 0 $partitions" command to do 
the test:
#define PARTS_DEFAULT \
        "uuid_disk=${uuid_gpt_disk};" \
        "name=boot,size=32M,uuid=${uuid_gpt_boot};" \
        "name=rootfs,size=-,uuid=${uuid_gpt_rootfs};"

Without this patch, I get message:
=> gpt write mmc 0 $partitions
Writing GPT: Partitions layout exceds disk size
error!

After I apply this patch, I get below message:
Writing GPT: success!

Thanks,
- Kever

>
> Michael
>
>>                  } else {
>>                          size_ll = ustrtoull(p, &p, 0);
>>                          parts[i].size = lldiv(size_ll, dev_desc->blksz);
>> --
>> 1.9.1
>>
>>
>
>
Michael Nazzareno Trimarchi July 26, 2016, 9:08 a.m. UTC | #3
Hi

On Tue, Jul 26, 2016 at 10:59 AM, Kever Yang <kever.yang@rock-chips.com> wrote:
> Hi Michael,
>
>
> On 07/26/2016 04:37 PM, Michael Trimarchi wrote:
>>
>> Hi
>>
>> On Tue, Jul 26, 2016 at 9:56 AM, Kever Yang <kever.yang@rock-chips.com>
>> 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>
>>> ---
>>>
>>>   cmd/gpt.c | 4 ++--
>>>   1 file changed, 2 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;
>>
>> gpt verify give you success?
>
>
> Yes.
>
> I use below gpt table and "gpt write mmc 0 $partitions" command to do the
> test:
> #define PARTS_DEFAULT \
>        "uuid_disk=${uuid_gpt_disk};" \
>        "name=boot,size=32M,uuid=${uuid_gpt_boot};" \
>        "name=rootfs,size=-,uuid=${uuid_gpt_rootfs};"
>
> Without this patch, I get message:
> => gpt write mmc 0 $partitions
> Writing GPT: Partitions layout exceds disk size
> error!
>
> After I apply this patch, I get below message:
> Writing GPT: success!
>

gpt read back does give you success?

Michael

> Thanks,
> - Kever
>
>
>>
>> Michael
>>
>>>                  } else {
>>>                          size_ll = ustrtoull(p, &p, 0);
>>>                          parts[i].size = lldiv(size_ll, dev_desc->blksz);
>>> --
>>> 1.9.1
>>>
>>>
>>
>>
>
>
Kever Yang July 26, 2016, 9:41 a.m. UTC | #4
Hi Michael,

On 07/26/2016 05:08 PM, Michael Trimarchi wrote:
> Hi
>
> On Tue, Jul 26, 2016 at 10:59 AM, Kever Yang <kever.yang@rock-chips.com> wrote:
>> Hi Michael,
>>
>>
>> On 07/26/2016 04:37 PM, Michael Trimarchi wrote:
>>> Hi
>>>
>>> On Tue, Jul 26, 2016 at 9:56 AM, Kever Yang <kever.yang@rock-chips.com>
>>> 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>
>>>> ---
>>>>
>>>>    cmd/gpt.c | 4 ++--
>>>>    1 file changed, 2 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;
>>> gpt verify give you success?
>>
>> Yes.
>>
>> I use below gpt table and "gpt write mmc 0 $partitions" command to do the
>> test:
>> #define PARTS_DEFAULT \
>>         "uuid_disk=${uuid_gpt_disk};" \
>>         "name=boot,size=32M,uuid=${uuid_gpt_boot};" \
>>         "name=rootfs,size=-,uuid=${uuid_gpt_rootfs};"
>>
>> Without this patch, I get message:
>> => gpt write mmc 0 $partitions
>> Writing GPT: Partitions layout exceds disk size
>> error!
>>
>> After I apply this patch, I get below message:
>> Writing GPT: success!
>>
> gpt read back does give you success?

Sorry, I misunderstand your mean about verify.

Here is the result with verify command, it do failed.
=> gpt verify mmc 0 $partitions
ERROR: Partition rootfs size: 30679007 does not match 0!

at disk/part_efi.c:660/gpt_verify_partitions()
Verify GPT: error!

So I get size check failed for the last partition, can we update the 
size check for
the last partition, or update the partition size after extend to maximum?

Thanks,
- Kever

>
> Michael
>
>> Thanks,
>> - Kever
>>
>>
>>> Michael
>>>
>>>>                   } else {
>>>>                           size_ll = ustrtoull(p, &p, 0);
>>>>                           parts[i].size = lldiv(size_ll, dev_desc->blksz);
>>>> --
>>>> 1.9.1
>>>>
>>>>
>>>
>>
>
>
Julian Scheel July 27, 2016, 1:10 p.m. UTC | #5
Hi Michael, all,

On 26.07.2016 11:41, Kever Yang wrote:
> Hi Michael,
>
> On 07/26/2016 05:08 PM, Michael Trimarchi wrote:
>> Hi
>>
>> On Tue, Jul 26, 2016 at 10:59 AM, Kever Yang
>> <kever.yang@rock-chips.com> wrote:
>>> Hi Michael,
>>>
>>>
>>> On 07/26/2016 04:37 PM, Michael Trimarchi wrote:
>>>> Hi
>>>>
>>>> On Tue, Jul 26, 2016 at 9:56 AM, Kever Yang <kever.yang@rock-chips.com>
>>>> 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>
>>>>> ---
>>>>>
>>>>>    cmd/gpt.c | 4 ++--
>>>>>    1 file changed, 2 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;
>>>> gpt verify give you success?
>>>
>>> Yes.
>>>
>>> I use below gpt table and "gpt write mmc 0 $partitions" command to do
>>> the
>>> test:
>>> #define PARTS_DEFAULT \
>>>         "uuid_disk=${uuid_gpt_disk};" \
>>>         "name=boot,size=32M,uuid=${uuid_gpt_boot};" \
>>>         "name=rootfs,size=-,uuid=${uuid_gpt_rootfs};"
>>>
>>> Without this patch, I get message:
>>> => gpt write mmc 0 $partitions
>>> Writing GPT: Partitions layout exceds disk size
>>> error!
>>>
>>> After I apply this patch, I get below message:
>>> Writing GPT: success!
>>>
>> gpt read back does give you success?
>
> Sorry, I misunderstand your mean about verify.
>
> Here is the result with verify command, it do failed.
> => gpt verify mmc 0 $partitions
> ERROR: Partition rootfs size: 30679007 does not match 0!
>
> at disk/part_efi.c:660/gpt_verify_partitions()
> Verify GPT: error!
>
> So I get size check failed for the last partition, can we update the
> size check for
> the last partition, or update the partition size after extend to maximum?

The size check obviously fails when no size was given. I would propose 
to simply disable the size check for partitions with no given size. 
There is no point in computing the desired size just to allow a check 
which does the same computation backwards to pass.

-Julian

> Thanks,
> - Kever
>
>>
>> Michael
>>
>>> Thanks,
>>> - Kever
>>>
>>>
>>>> Michael
>>>>
>>>>>                   } else {
>>>>>                           size_ll = ustrtoull(p, &p, 0);
>>>>>                           parts[i].size = lldiv(size_ll,
>>>>> dev_desc->blksz);
>>>>> --
>>>>> 1.9.1
>>>>>
>>>>>
>>>>
>>>
>>
>>
>
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
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);