rpms/kernel/F-11 partitions-use-sector-size-for-efi-gpt.patch, NONE, 1.1.2.1 kernel.spec, 1.1784.2.24, 1.1784.2.25
Kyle McMartin
kyle at fedoraproject.org
Wed Feb 17 19:17:53 UTC 2010
- Previous message: rpms/telepathy-feed/F-13 dead.package, NONE, 1.1 Makefile, 1.2, NONE branch, 1.1, NONE sources, 1.2, NONE telepathy-feed.spec, 1.7, NONE
- Next message: rpms/telepathy-feed/F-13 dead.package,1.1,1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: kyle
Update of /cvs/pkgs/rpms/kernel/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv3829
Modified Files:
Tag: private-fedora-11-2_6_30
kernel.spec
Added Files:
Tag: private-fedora-11-2_6_30
partitions-use-sector-size-for-efi-gpt.patch
Log Message:
* Wed Feb 17 2010 Kyle McMartin <kyle at redhat.com>
- partitions: don't hardcode 512b sectors for GPT. (fixes >2TB disks.)
partitions-use-sector-size-for-efi-gpt.patch:
efi.c | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
--- NEW FILE partitions-use-sector-size-for-efi-gpt.patch ---
>From 629a68aeda2bf51421fbab5266d45c622c715112 Mon Sep 17 00:00:00 2001
From: Karel Zak <kzak at redhat.com>
Date: Mon, 23 Nov 2009 09:29:13 +0100
Subject: partitions: use sector size for EFI GPT
Currently, kernel uses strictly 512-byte sectors for EFI GPT parsing.
That's wrong.
UEFI standard (version 2.3, May 2009, 5.3.1 GUID Format overview, page
95) defines that LBA is always based on the logical block size. It
means bdev_logical_block_size() (aka BLKSSZGET) for Linux.
This patch removes static sector size from EFI GPT parser.
The problem is reproducible with the latest GNU Parted:
# modprobe scsi_debug dev_size_mb=50 sector_size=4096
# ./parted /dev/sdb print
Model: Linux scsi_debug (scsi)
Disk /dev/sdb: 52.4MB
Sector size (logical/physical): 4096B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 24.6kB 3002kB 2978kB primary
2 3002kB 6001kB 2998kB primary
3 6001kB 9003kB 3002kB primary
# blockdev --rereadpt /dev/sdb
# dmesg | tail -1
sdb: unknown partition table <---- !!!
with this patch:
# blockdev --rereadpt /dev/sdb
# dmesg | tail -1
sdb: sdb1 sdb2 sdb3
Signed-off-by: Karel Zak <kzak at redhat.com>
Signed-off-by: Jens Axboe <jens.axboe at oracle.com>
---
fs/partitions/efi.c | 23 +++++++++++++++--------
1 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/fs/partitions/efi.c b/fs/partitions/efi.c
index 038a602..80eeff5 100644
--- a/fs/partitions/efi.c
+++ b/fs/partitions/efi.c
@@ -1,7 +1,9 @@
/************************************************************
* EFI GUID Partition Table handling
- * Per Intel EFI Specification v1.02
- * http://developer.intel.com/technology/efi/efi.htm
+ *
+ * http://www.uefi.org/specs/
+ * http://www.intel.com/technology/efi/
+ *
* efi.[ch] by Matt Domsch <Matt_Domsch at dell.com>
* Copyright 2000,2001,2002,2004 Dell Inc.
*
@@ -92,6 +94,7 @@
*
************************************************************/
#include <linux/crc32.h>
+#include <linux/math64.h>
#include "check.h"
#include "efi.h"
@@ -141,7 +144,8 @@ last_lba(struct block_device *bdev)
{
if (!bdev || !bdev->bd_inode)
return 0;
- return (bdev->bd_inode->i_size >> 9) - 1ULL;
+ return div_u64(bdev->bd_inode->i_size,
+ bdev_logical_block_size(bdev)) - 1ULL;
}
static inline int
@@ -188,6 +192,7 @@ static size_t
read_lba(struct block_device *bdev, u64 lba, u8 * buffer, size_t count)
{
size_t totalreadcount = 0;
+ sector_t n = lba * (bdev_logical_block_size(bdev) / 512);
if (!bdev || !buffer || lba > last_lba(bdev))
return 0;
@@ -195,7 +200,7 @@ read_lba(struct block_device *bdev, u64 lba, u8 * buffer, size_t count)
while (count) {
int copied = 512;
Sector sect;
- unsigned char *data = read_dev_sector(bdev, lba++, §);
+ unsigned char *data = read_dev_sector(bdev, n++, §);
if (!data)
break;
if (copied > count)
@@ -601,6 +606,7 @@ efi_partition(struct parsed_partitions *state, struct block_device *bdev)
gpt_header *gpt = NULL;
gpt_entry *ptes = NULL;
u32 i;
+ unsigned ssz = bdev_logical_block_size(bdev) / 512;
if (!find_valid_gpt(bdev, &gpt, &ptes) || !gpt || !ptes) {
kfree(gpt);
@@ -611,13 +617,14 @@ efi_partition(struct parsed_partitions *state, struct block_device *bdev)
pr_debug("GUID Partition Table is valid! Yea!\n");
for (i = 0; i < le32_to_cpu(gpt->num_partition_entries) && i < state->limit-1; i++) {
+ u64 start = le64_to_cpu(ptes[i].starting_lba);
+ u64 size = le64_to_cpu(ptes[i].ending_lba) -
+ le64_to_cpu(ptes[i].starting_lba) + 1ULL;
+
if (!is_pte_valid(&ptes[i], last_lba(bdev)))
continue;
- put_partition(state, i+1, le64_to_cpu(ptes[i].starting_lba),
- (le64_to_cpu(ptes[i].ending_lba) -
- le64_to_cpu(ptes[i].starting_lba) +
- 1ULL));
+ put_partition(state, i+1, start * ssz, size * ssz);
/* If this is a RAID volume, tell md */
if (!efi_guidcmp(ptes[i].partition_type_guid,
--
1.6.6
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/kernel.spec,v
retrieving revision 1.1784.2.24
retrieving revision 1.1784.2.25
diff -u -p -r1.1784.2.24 -r1.1784.2.25
--- kernel.spec 13 Feb 2010 14:21:59 -0000 1.1784.2.24
+++ kernel.spec 17 Feb 2010 19:17:52 -0000 1.1784.2.25
@@ -900,6 +900,8 @@ Patch16560: futex-handle-user-space-corr
Patch16561: futex-handle-futex-value-corruption-gracefully.patch
Patch16562: futex_lock_pi-key-refcnt-fix.patch
+Patch16570: partitions-use-sector-size-for-efi-gpt.patch
+
%endif
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
@@ -1694,6 +1696,8 @@ ApplyPatch futex-handle-user-space-corru
ApplyPatch futex-handle-futex-value-corruption-gracefully.patch
ApplyPatch futex_lock_pi-key-refcnt-fix.patch
+ApplyPatch partitions-use-sector-size-for-efi-gpt.patch
+
# END OF PATCH APPLICATIONS
%endif
@@ -2282,6 +2286,9 @@ fi
# and build.
%changelog
+* Wed Feb 17 2010 Kyle McMartin <kyle at redhat.com>
+- partitions: don't hardcode 512b sectors for GPT. (fixes >2TB disks.)
+
* Sat Feb 13 2010 Chuck Ebbert <cebbert at redhat.com> 2.6.30.10-105.2.24
- futex-handle-futex-value-corruption-gracefully.patch, futex_lock_pi-key-refcnt-fix.patch:
more futex fixes from the 2.6.31 queue
- Previous message: rpms/telepathy-feed/F-13 dead.package, NONE, 1.1 Makefile, 1.2, NONE branch, 1.1, NONE sources, 1.2, NONE telepathy-feed.spec, 1.7, NONE
- Next message: rpms/telepathy-feed/F-13 dead.package,1.1,1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the scm-commits
mailing list