Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 172959
b: refs/heads/master
c: 7d13af3
h: refs/heads/master
i:
  172957: 3d8d9fa
  172955: 43f924f
  172951: 3aaaadb
  172943: 5a71248
  172927: 9836968
v: v3
  • Loading branch information
Karel Zak authored and Jens Axboe committed Nov 23, 2009
1 parent 139d3e2 commit 6685012
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8721c81f6480e2c9acbf92078383953f825d1057
refs/heads/master: 7d13af3279985f554784a45cc961f706dbcdbdd1
23 changes: 15 additions & 8 deletions trunk/fs/partitions/efi.c
Original file line number Diff line number Diff line change
@@ -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@dell.com>
* Copyright 2000,2001,2002,2004 Dell Inc.
*
Expand Down Expand Up @@ -92,6 +94,7 @@
*
************************************************************/
#include <linux/crc32.h>
#include <linux/math64.h>
#include "check.h"
#include "efi.h"

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -188,14 +192,15 @@ 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;

while (count) {
int copied = 512;
Sector sect;
unsigned char *data = read_dev_sector(bdev, lba++, &sect);
unsigned char *data = read_dev_sector(bdev, n++, &sect);
if (!data)
break;
if (copied > count)
Expand Down Expand Up @@ -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);
Expand All @@ -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,
Expand Down

0 comments on commit 6685012

Please sign in to comment.