Re: [PATCH] fs:partitions:efi.c: bugfix a issue in find_valid_gpt

From: Andrew Morton
Date: Mon Nov 21 2011 - 17:33:32 EST


On Mon, 21 Nov 2011 17:38:01 +0800
wangyanqing <udknight@xxxxxxxxx> wrote:

> I meet a 3T disk, which partitioned by Windows 7,
> and linux report unknow partition table. But it can been
> detected the partition table when I add gpt to boot
> parameter.
>
> This issue caused by the find_valid_gpt function will fail
> out when check the legacy mbr failed if there is no gpt boot
> parameter.
>
> if boot without gpt, we should fail back to check the guid
> partition table when check the legacy mbr failed instead of
> fail out.
>
> Signed-off-by: Wang YanQing <udknight@xxxxxxxxx>
> ---
> fs/partitions/efi.c | 2 --
> 1 files changed, 0 insertions(+), 2 deletions(-)
>
> diff --git a/fs/partitions/efi.c b/fs/partitions/efi.c
> index 6296b40..302631e 100644
> --- a/fs/partitions/efi.c
> +++ b/fs/partitions/efi.c
> @@ -543,8 +543,6 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt,
> good_pmbr = is_pmbr_valid(legacymbr);
> kfree(legacymbr);
> }
> - if (!good_pmbr)
> - goto fail;
> }
>
> good_pgpt = is_gpt_valid(state, GPT_PRIMARY_PARTITION_TABLE_LBA,

If we make this change then we didn't need to calculate good_pmbr. So
we didn't need to read the LBA and we didn't need to allocate and free
legacymbr. So afaict all this code just goes away:

--- a/fs/partitions/efi.c
+++ a/fs/partitions/efi.c
@@ -534,18 +534,6 @@
return 0;

lastlba = last_lba(state->bdev);
- if (!force_gpt) {
- /* This will be added to the EFI Spec. per Intel after v1.02. */
- legacymbr = kzalloc(sizeof (*legacymbr), GFP_KERNEL);
- if (legacymbr) {
- read_lba(state, 0, (u8 *) legacymbr,
- sizeof (*legacymbr));
- good_pmbr = is_pmbr_valid(legacymbr);
- kfree(legacymbr);
- }
- if (!good_pmbr)
- goto fail;
- }

good_pgpt = is_gpt_valid(state, GPT_PRIMARY_PARTITION_TABLE_LBA,
&pgpt, &pptes);

and I don't know what the implications of that would be.

Matt, could you please take a look at this?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/