From 9d37c772242ac5f0c784a5dd1c77635671296bc2 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Mon, 23 Nov 2009 09:29:58 +0100 Subject: [PATCH] --- yaml --- r: 172960 b: refs/heads/master c: 87038c2d5bda2418fda8b1456a0ae81cc3ff5bd8 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/partitions/efi.c | 7 ++++--- trunk/fs/partitions/efi.h | 8 ++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index d53d1d444b87..1be9c8016d1e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7d13af3279985f554784a45cc961f706dbcdbdd1 +refs/heads/master: 87038c2d5bda2418fda8b1456a0ae81cc3ff5bd8 diff --git a/trunk/fs/partitions/efi.c b/trunk/fs/partitions/efi.c index 80eeff5fdfe0..49cfd5f54238 100644 --- a/trunk/fs/partitions/efi.c +++ b/trunk/fs/partitions/efi.c @@ -262,15 +262,16 @@ static gpt_header * alloc_read_gpt_header(struct block_device *bdev, u64 lba) { gpt_header *gpt; + unsigned ssz = bdev_logical_block_size(bdev); + if (!bdev) return NULL; - gpt = kzalloc(sizeof (gpt_header), GFP_KERNEL); + gpt = kzalloc(ssz, GFP_KERNEL); if (!gpt) return NULL; - if (read_lba(bdev, lba, (u8 *) gpt, - sizeof (gpt_header)) < sizeof (gpt_header)) { + if (read_lba(bdev, lba, (u8 *) gpt, ssz) < ssz) { kfree(gpt); gpt=NULL; return NULL; diff --git a/trunk/fs/partitions/efi.h b/trunk/fs/partitions/efi.h index 2cc89d0475bf..6998b589abf9 100644 --- a/trunk/fs/partitions/efi.h +++ b/trunk/fs/partitions/efi.h @@ -37,7 +37,6 @@ #define EFI_PMBR_OSTYPE_EFI 0xEF #define EFI_PMBR_OSTYPE_EFI_GPT 0xEE -#define GPT_BLOCK_SIZE 512 #define GPT_HEADER_SIGNATURE 0x5452415020494645ULL #define GPT_HEADER_REVISION_V1 0x00010000 #define GPT_PRIMARY_PARTITION_TABLE_LBA 1 @@ -79,7 +78,12 @@ typedef struct _gpt_header { __le32 num_partition_entries; __le32 sizeof_partition_entry; __le32 partition_entry_array_crc32; - u8 reserved2[GPT_BLOCK_SIZE - 92]; + + /* The rest of the logical block is reserved by UEFI and must be zero. + * EFI standard handles this by: + * + * uint8_t reserved2[ BlockSize - 92 ]; + */ } __attribute__ ((packed)) gpt_header; typedef struct _gpt_entry_attributes {