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

Kever Yang
2016-07-26T09:41:06Z

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
>>>>
>>>>
>>>
>>
>
>