On Wed, Aug 18, 2021 at 03:55:47AM +0300, Dmitry Osipenko wrote: > Support looking up GPT at a non-standard location specified by a block > device driver. > > Signed-off-by: Dmitry Osipenko <digetx@xxxxxxxxx> > --- > block/partitions/efi.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/block/partitions/efi.c b/block/partitions/efi.c > index aaa3dc487cb5..b9509f445b3c 100644 > --- a/block/partitions/efi.c > +++ b/block/partitions/efi.c > @@ -585,6 +585,8 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt, > gpt_header *pgpt = NULL, *agpt = NULL; > gpt_entry *pptes = NULL, *aptes = NULL; > legacy_mbr *legacymbr; > + struct gendisk *disk = state->disk; > + const struct block_device_operations *fops = disk->fops; > sector_t total_sectors = get_capacity(state->disk); > u64 lastlba; > > @@ -619,6 +621,17 @@ 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 && fops->alternative_gpt_sector) { > + struct block_device *bdev = disk->part0; > + sector_t agpt_sector; > + int err; > + > + err = fops->alternative_gpt_sector(bdev, &agpt_sector); Please call the method with the disk as the argument. I've been moving the block layer to generally pass the gendisk whenever we're dealing with the whole device, as that makes the intent very clear. Also do we really need the force_gpt check? That is we always require the user to pass a command line argument to use this?