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;
 
 #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
        __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 {