]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
fs: partitions: efi: Add force_gpt_sector parameter
authorColin Cross <ccross@android.com>
Fri, 28 Jan 2011 21:45:06 +0000 (13:45 -0800)
committerDan Willemsen <dwillemsen@nvidia.com>
Sat, 14 Sep 2013 08:37:19 +0000 (01:37 -0700)
force_gpt_sector=<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 <ccross@android.com>
Rebase-Id: Rbcbb8f2f0882f3750e748b5cc83038ca0f5940db

block/partitions/efi.c

index c85fc895ecdbbeba25b624e1af909bfa61f3acc2..f318732cef4bb9370de4e776a87646f401cfd78d 100644 (file)
  * 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;