From d11983cefdc26988b9c2f8f72b1f115a3af3aee3 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 28 Jan 2011 13:45:06 -0800 Subject: fs: partitions: efi: Add force_gpt_sector parameter force_gpt_sector= causes the GPT partition search to look at the specified sector for a valid GPT header if the GPT is not found at the beginning or the end of the block device. Change-Id: I9b5f85ce24719c0538d42ec5a94344c7f6556b2b Signed-off-by: Colin Cross Rebase-Id: Rbcbb8f2f0882f3750e748b5cc83038ca0f5940db --- block/partitions/efi.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'block') diff --git a/block/partitions/efi.c b/block/partitions/efi.c index c85fc895ecdb..f318732cef4b 100644 --- a/block/partitions/efi.c +++ b/block/partitions/efi.c @@ -105,6 +105,7 @@ * the partition tables happens after init too. */ static int force_gpt; +static u64 force_gpt_sector; static int __init force_gpt_fn(char *str) { @@ -113,6 +114,13 @@ force_gpt_fn(char *str) } __setup("gpt", force_gpt_fn); +static int __init force_gpt_sector_fn(char *str) +{ + force_gpt_sector = simple_strtoull(str, NULL, 0); + return 1; +} +__setup("gpt_sector=", force_gpt_sector_fn); + /** * efi_crc32() - EFI version of crc32 function @@ -564,6 +572,9 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt, if (!good_agpt && force_gpt) good_agpt = is_gpt_valid(state, lastlba, &agpt, &aptes); + if (!good_agpt && force_gpt && force_gpt_sector) + good_agpt = is_gpt_valid(state, force_gpt_sector, &agpt, &aptes); + /* The obviously unsuccessful case */ if (!good_pgpt && !good_agpt) goto fail; -- cgit v1.2.3