diff options
| -rw-r--r-- | fs/partitions/acorn.c | 68 | ||||
| -rw-r--r-- | fs/partitions/acorn.h | 10 | ||||
| -rw-r--r-- | fs/partitions/amiga.c | 13 | ||||
| -rw-r--r-- | fs/partitions/amiga.h | 2 | ||||
| -rw-r--r-- | fs/partitions/atari.c | 8 | ||||
| -rw-r--r-- | fs/partitions/atari.h | 2 | ||||
| -rw-r--r-- | fs/partitions/check.c | 5 | ||||
| -rw-r--r-- | fs/partitions/check.h | 7 | ||||
| -rw-r--r-- | fs/partitions/efi.c | 91 | ||||
| -rw-r--r-- | fs/partitions/efi.h | 2 | ||||
| -rw-r--r-- | fs/partitions/ibm.c | 21 | ||||
| -rw-r--r-- | fs/partitions/ibm.h | 2 | ||||
| -rw-r--r-- | fs/partitions/karma.c | 4 | ||||
| -rw-r--r-- | fs/partitions/karma.h | 2 | ||||
| -rw-r--r-- | fs/partitions/ldm.c | 89 | ||||
| -rw-r--r-- | fs/partitions/ldm.h | 2 | ||||
| -rw-r--r-- | fs/partitions/mac.c | 11 | ||||
| -rw-r--r-- | fs/partitions/mac.h | 2 | ||||
| -rw-r--r-- | fs/partitions/msdos.c | 85 | ||||
| -rw-r--r-- | fs/partitions/msdos.h | 2 | ||||
| -rw-r--r-- | fs/partitions/osf.c | 4 | ||||
| -rw-r--r-- | fs/partitions/osf.h | 2 | ||||
| -rw-r--r-- | fs/partitions/sgi.c | 6 | ||||
| -rw-r--r-- | fs/partitions/sgi.h | 2 | ||||
| -rw-r--r-- | fs/partitions/sun.c | 6 | ||||
| -rw-r--r-- | fs/partitions/sun.h | 2 | ||||
| -rw-r--r-- | fs/partitions/sysv68.c | 6 | ||||
| -rw-r--r-- | fs/partitions/sysv68.h | 2 | ||||
| -rw-r--r-- | fs/partitions/ultrix.c | 4 | ||||
| -rw-r--r-- | fs/partitions/ultrix.h | 2 |
30 files changed, 225 insertions, 239 deletions
diff --git a/fs/partitions/acorn.c b/fs/partitions/acorn.c index a97b477ac0fc..6921e7890be6 100644 --- a/fs/partitions/acorn.c +++ b/fs/partitions/acorn.c | |||
| @@ -70,14 +70,14 @@ struct riscix_record { | |||
| 70 | 70 | ||
| 71 | #if defined(CONFIG_ACORN_PARTITION_CUMANA) || \ | 71 | #if defined(CONFIG_ACORN_PARTITION_CUMANA) || \ |
| 72 | defined(CONFIG_ACORN_PARTITION_ADFS) | 72 | defined(CONFIG_ACORN_PARTITION_ADFS) |
| 73 | static int | 73 | static int riscix_partition(struct parsed_partitions *state, |
| 74 | riscix_partition(struct parsed_partitions *state, struct block_device *bdev, | 74 | unsigned long first_sect, int slot, |
| 75 | unsigned long first_sect, int slot, unsigned long nr_sects) | 75 | unsigned long nr_sects) |
| 76 | { | 76 | { |
| 77 | Sector sect; | 77 | Sector sect; |
| 78 | struct riscix_record *rr; | 78 | struct riscix_record *rr; |
| 79 | 79 | ||
| 80 | rr = (struct riscix_record *)read_dev_sector(bdev, first_sect, §); | 80 | rr = read_part_sector(state, first_sect, §); |
| 81 | if (!rr) | 81 | if (!rr) |
| 82 | return -1; | 82 | return -1; |
| 83 | 83 | ||
| @@ -123,9 +123,9 @@ struct linux_part { | |||
| 123 | 123 | ||
| 124 | #if defined(CONFIG_ACORN_PARTITION_CUMANA) || \ | 124 | #if defined(CONFIG_ACORN_PARTITION_CUMANA) || \ |
| 125 | defined(CONFIG_ACORN_PARTITION_ADFS) | 125 | defined(CONFIG_ACORN_PARTITION_ADFS) |
| 126 | static int | 126 | static int linux_partition(struct parsed_partitions *state, |
| 127 | linux_partition(struct parsed_partitions *state, struct block_device *bdev, | 127 | unsigned long first_sect, int slot, |
| 128 | unsigned long first_sect, int slot, unsigned long nr_sects) | 128 | unsigned long nr_sects) |
| 129 | { | 129 | { |
| 130 | Sector sect; | 130 | Sector sect; |
| 131 | struct linux_part *linuxp; | 131 | struct linux_part *linuxp; |
| @@ -135,7 +135,7 @@ linux_partition(struct parsed_partitions *state, struct block_device *bdev, | |||
| 135 | 135 | ||
| 136 | put_partition(state, slot++, first_sect, size); | 136 | put_partition(state, slot++, first_sect, size); |
| 137 | 137 | ||
| 138 | linuxp = (struct linux_part *)read_dev_sector(bdev, first_sect, §); | 138 | linuxp = read_part_sector(state, first_sect, §); |
| 139 | if (!linuxp) | 139 | if (!linuxp) |
| 140 | return -1; | 140 | return -1; |
| 141 | 141 | ||
| @@ -157,8 +157,7 @@ linux_partition(struct parsed_partitions *state, struct block_device *bdev, | |||
| 157 | #endif | 157 | #endif |
| 158 | 158 | ||
| 159 | #ifdef CONFIG_ACORN_PARTITION_CUMANA | 159 | #ifdef CONFIG_ACORN_PARTITION_CUMANA |
| 160 | int | 160 | int adfspart_check_CUMANA(struct parsed_partitions *state) |
| 161 | adfspart_check_CUMANA(struct parsed_partitions *state, struct block_device *bdev) | ||
| 162 | { | 161 | { |
| 163 | unsigned long first_sector = 0; | 162 | unsigned long first_sector = 0; |
| 164 | unsigned int start_blk = 0; | 163 | unsigned int start_blk = 0; |
| @@ -185,7 +184,7 @@ adfspart_check_CUMANA(struct parsed_partitions *state, struct block_device *bdev | |||
| 185 | struct adfs_discrecord *dr; | 184 | struct adfs_discrecord *dr; |
| 186 | unsigned int nr_sects; | 185 | unsigned int nr_sects; |
| 187 | 186 | ||
| 188 | data = read_dev_sector(bdev, start_blk * 2 + 6, §); | 187 | data = read_part_sector(state, start_blk * 2 + 6, §); |
| 189 | if (!data) | 188 | if (!data) |
| 190 | return -1; | 189 | return -1; |
| 191 | 190 | ||
| @@ -217,14 +216,14 @@ adfspart_check_CUMANA(struct parsed_partitions *state, struct block_device *bdev | |||
| 217 | #ifdef CONFIG_ACORN_PARTITION_RISCIX | 216 | #ifdef CONFIG_ACORN_PARTITION_RISCIX |
| 218 | case PARTITION_RISCIX_SCSI: | 217 | case PARTITION_RISCIX_SCSI: |
| 219 | /* RISCiX - we don't know how to find the next one. */ | 218 | /* RISCiX - we don't know how to find the next one. */ |
| 220 | slot = riscix_partition(state, bdev, first_sector, | 219 | slot = riscix_partition(state, first_sector, slot, |
| 221 | slot, nr_sects); | 220 | nr_sects); |
| 222 | break; | 221 | break; |
| 223 | #endif | 222 | #endif |
| 224 | 223 | ||
| 225 | case PARTITION_LINUX: | 224 | case PARTITION_LINUX: |
| 226 | slot = linux_partition(state, bdev, first_sector, | 225 | slot = linux_partition(state, first_sector, slot, |
| 227 | slot, nr_sects); | 226 | nr_sects); |
| 228 | break; | 227 | break; |
| 229 | } | 228 | } |
| 230 | put_dev_sector(sect); | 229 | put_dev_sector(sect); |
| @@ -249,8 +248,7 @@ adfspart_check_CUMANA(struct parsed_partitions *state, struct block_device *bdev | |||
| 249 | * hda1 = ADFS partition on first drive. | 248 | * hda1 = ADFS partition on first drive. |
| 250 | * hda2 = non-ADFS partition. | 249 | * hda2 = non-ADFS partition. |
| 251 | */ | 250 | */ |
| 252 | int | 251 | int adfspart_check_ADFS(struct parsed_partitions *state) |
| 253 | adfspart_check_ADFS(struct parsed_partitions *state, struct block_device *bdev) | ||
| 254 | { | 252 | { |
| 255 | unsigned long start_sect, nr_sects, sectscyl, heads; | 253 | unsigned long start_sect, nr_sects, sectscyl, heads; |
| 256 | Sector sect; | 254 | Sector sect; |
| @@ -259,7 +257,7 @@ adfspart_check_ADFS(struct parsed_partitions *state, struct block_device *bdev) | |||
| 259 | unsigned char id; | 257 | unsigned char id; |
| 260 | int slot = 1; | 258 | int slot = 1; |
| 261 | 259 | ||
| 262 | data = read_dev_sector(bdev, 6, §); | 260 | data = read_part_sector(state, 6, §); |
| 263 | if (!data) | 261 | if (!data) |
| 264 | return -1; | 262 | return -1; |
| 265 | 263 | ||
| @@ -278,21 +276,21 @@ adfspart_check_ADFS(struct parsed_partitions *state, struct block_device *bdev) | |||
| 278 | /* | 276 | /* |
| 279 | * Work out start of non-adfs partition. | 277 | * Work out start of non-adfs partition. |
| 280 | */ | 278 | */ |
| 281 | nr_sects = (bdev->bd_inode->i_size >> 9) - start_sect; | 279 | nr_sects = (state->bdev->bd_inode->i_size >> 9) - start_sect; |
| 282 | 280 | ||
| 283 | if (start_sect) { | 281 | if (start_sect) { |
| 284 | switch (id) { | 282 | switch (id) { |
| 285 | #ifdef CONFIG_ACORN_PARTITION_RISCIX | 283 | #ifdef CONFIG_ACORN_PARTITION_RISCIX |
| 286 | case PARTITION_RISCIX_SCSI: | 284 | case PARTITION_RISCIX_SCSI: |
| 287 | case PARTITION_RISCIX_MFM: | 285 | case PARTITION_RISCIX_MFM: |
| 288 | slot = riscix_partition(state, bdev, start_sect, | 286 | slot = riscix_partition(state, start_sect, slot, |
| 289 | slot, nr_sects); | 287 | nr_sects); |
| 290 | break; | 288 | break; |
| 291 | #endif | 289 | #endif |
| 292 | 290 | ||
| 293 | case PARTITION_LINUX: | 291 | case PARTITION_LINUX: |
| 294 | slot = linux_partition(state, bdev, start_sect, | 292 | slot = linux_partition(state, start_sect, slot, |
| 295 | slot, nr_sects); | 293 | nr_sects); |
| 296 | break; | 294 | break; |
| 297 | } | 295 | } |
| 298 | } | 296 | } |
| @@ -308,10 +306,11 @@ struct ics_part { | |||
| 308 | __le32 size; | 306 | __le32 size; |
| 309 | }; | 307 | }; |
| 310 | 308 | ||
| 311 | static int adfspart_check_ICSLinux(struct block_device *bdev, unsigned long block) | 309 | static int adfspart_check_ICSLinux(struct parsed_partitions *state, |
| 310 | unsigned long block) | ||
| 312 | { | 311 | { |
| 313 | Sector sect; | 312 | Sector sect; |
| 314 | unsigned char *data = read_dev_sector(bdev, block, §); | 313 | unsigned char *data = read_part_sector(state, block, §); |
| 315 | int result = 0; | 314 | int result = 0; |
| 316 | 315 | ||
| 317 | if (data) { | 316 | if (data) { |
| @@ -349,8 +348,7 @@ static inline int valid_ics_sector(const unsigned char *data) | |||
| 349 | * hda2 = ADFS partition 1 on first drive. | 348 | * hda2 = ADFS partition 1 on first drive. |
| 350 | * ..etc.. | 349 | * ..etc.. |
| 351 | */ | 350 | */ |
| 352 | int | 351 | int adfspart_check_ICS(struct parsed_partitions *state) |
| 353 | adfspart_check_ICS(struct parsed_partitions *state, struct block_device *bdev) | ||
| 354 | { | 352 | { |
| 355 | const unsigned char *data; | 353 | const unsigned char *data; |
| 356 | const struct ics_part *p; | 354 | const struct ics_part *p; |
| @@ -360,7 +358,7 @@ adfspart_check_ICS(struct parsed_partitions *state, struct block_device *bdev) | |||
| 360 | /* | 358 | /* |
| 361 | * Try ICS style partitions - sector 0 contains partition info. | 359 | * Try ICS style partitions - sector 0 contains partition info. |
| 362 | */ | 360 | */ |
| 363 | data = read_dev_sector(bdev, 0, §); | 361 | data = read_part_sector(state, 0, §); |
| 364 | if (!data) | 362 | if (!data) |
| 365 | return -1; | 363 | return -1; |
| 366 | 364 | ||
| @@ -392,7 +390,7 @@ adfspart_check_ICS(struct parsed_partitions *state, struct block_device *bdev) | |||
| 392 | * partition is. We must not make this visible | 390 | * partition is. We must not make this visible |
| 393 | * to the filesystem. | 391 | * to the filesystem. |
| 394 | */ | 392 | */ |
| 395 | if (size > 1 && adfspart_check_ICSLinux(bdev, start)) { | 393 | if (size > 1 && adfspart_check_ICSLinux(state, start)) { |
| 396 | start += 1; | 394 | start += 1; |
| 397 | size -= 1; | 395 | size -= 1; |
| 398 | } | 396 | } |
| @@ -446,8 +444,7 @@ static inline int valid_ptec_sector(const unsigned char *data) | |||
| 446 | * hda2 = ADFS partition 1 on first drive. | 444 | * hda2 = ADFS partition 1 on first drive. |
| 447 | * ..etc.. | 445 | * ..etc.. |
| 448 | */ | 446 | */ |
| 449 | int | 447 | int adfspart_check_POWERTEC(struct parsed_partitions *state) |
| 450 | adfspart_check_POWERTEC(struct parsed_partitions *state, struct block_device *bdev) | ||
| 451 | { | 448 | { |
| 452 | Sector sect; | 449 | Sector sect; |
| 453 | const unsigned char *data; | 450 | const unsigned char *data; |
| @@ -455,7 +452,7 @@ adfspart_check_POWERTEC(struct parsed_partitions *state, struct block_device *bd | |||
| 455 | int slot = 1; | 452 | int slot = 1; |
| 456 | int i; | 453 | int i; |
| 457 | 454 | ||
| 458 | data = read_dev_sector(bdev, 0, §); | 455 | data = read_part_sector(state, 0, §); |
| 459 | if (!data) | 456 | if (!data) |
| 460 | return -1; | 457 | return -1; |
| 461 | 458 | ||
| @@ -508,8 +505,7 @@ static const char eesox_name[] = { | |||
| 508 | * 1. The individual ADFS boot block entries that are placed on the disk. | 505 | * 1. The individual ADFS boot block entries that are placed on the disk. |
| 509 | * 2. The start address of the next entry. | 506 | * 2. The start address of the next entry. |
| 510 | */ | 507 | */ |
| 511 | int | 508 | int adfspart_check_EESOX(struct parsed_partitions *state) |
| 512 | adfspart_check_EESOX(struct parsed_partitions *state, struct block_device *bdev) | ||
| 513 | { | 509 | { |
| 514 | Sector sect; | 510 | Sector sect; |
| 515 | const unsigned char *data; | 511 | const unsigned char *data; |
| @@ -518,7 +514,7 @@ adfspart_check_EESOX(struct parsed_partitions *state, struct block_device *bdev) | |||
| 518 | sector_t start = 0; | 514 | sector_t start = 0; |
| 519 | int i, slot = 1; | 515 | int i, slot = 1; |
| 520 | 516 | ||
| 521 | data = read_dev_sector(bdev, 7, §); | 517 | data = read_part_sector(state, 7, §); |
| 522 | if (!data) | 518 | if (!data) |
| 523 | return -1; | 519 | return -1; |
| 524 | 520 | ||
| @@ -545,7 +541,7 @@ adfspart_check_EESOX(struct parsed_partitions *state, struct block_device *bdev) | |||
| 545 | if (i != 0) { | 541 | if (i != 0) { |
| 546 | sector_t size; | 542 | sector_t size; |
| 547 | 543 | ||
| 548 | size = get_capacity(bdev->bd_disk); | 544 | size = get_capacity(state->bdev->bd_disk); |
| 549 | put_partition(state, slot++, start, size - start); | 545 | put_partition(state, slot++, start, size - start); |
| 550 | printk("\n"); | 546 | printk("\n"); |
| 551 | } | 547 | } |
diff --git a/fs/partitions/acorn.h b/fs/partitions/acorn.h index 81fd50ecc080..ede828529692 100644 --- a/fs/partitions/acorn.h +++ b/fs/partitions/acorn.h | |||
| @@ -7,8 +7,8 @@ | |||
| 7 | * format, and everyone stick to it? | 7 | * format, and everyone stick to it? |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | int adfspart_check_CUMANA(struct parsed_partitions *state, struct block_device *bdev); | 10 | int adfspart_check_CUMANA(struct parsed_partitions *state); |
| 11 | int adfspart_check_ADFS(struct parsed_partitions *state, struct block_device *bdev); | 11 | int adfspart_check_ADFS(struct parsed_partitions *state); |
| 12 | int adfspart_check_ICS(struct parsed_partitions *state, struct block_device *bdev); | 12 | int adfspart_check_ICS(struct parsed_partitions *state); |
| 13 | int adfspart_check_POWERTEC(struct parsed_partitions *state, struct block_device *bdev); | 13 | int adfspart_check_POWERTEC(struct parsed_partitions *state); |
| 14 | int adfspart_check_EESOX(struct parsed_partitions *state, struct block_device *bdev); | 14 | int adfspart_check_EESOX(struct parsed_partitions *state); |
diff --git a/fs/partitions/amiga.c b/fs/partitions/amiga.c index 9917a8c360f2..ba443d4229f8 100644 --- a/fs/partitions/amiga.c +++ b/fs/partitions/amiga.c | |||
| @@ -23,8 +23,7 @@ checksum_block(__be32 *m, int size) | |||
| 23 | return sum; | 23 | return sum; |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | int | 26 | int amiga_partition(struct parsed_partitions *state) |
| 27 | amiga_partition(struct parsed_partitions *state, struct block_device *bdev) | ||
| 28 | { | 27 | { |
| 29 | Sector sect; | 28 | Sector sect; |
| 30 | unsigned char *data; | 29 | unsigned char *data; |
| @@ -38,11 +37,11 @@ amiga_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 38 | for (blk = 0; ; blk++, put_dev_sector(sect)) { | 37 | for (blk = 0; ; blk++, put_dev_sector(sect)) { |
| 39 | if (blk == RDB_ALLOCATION_LIMIT) | 38 | if (blk == RDB_ALLOCATION_LIMIT) |
| 40 | goto rdb_done; | 39 | goto rdb_done; |
| 41 | data = read_dev_sector(bdev, blk, §); | 40 | data = read_part_sector(state, blk, §); |
| 42 | if (!data) { | 41 | if (!data) { |
| 43 | if (warn_no_part) | 42 | if (warn_no_part) |
| 44 | printk("Dev %s: unable to read RDB block %d\n", | 43 | printk("Dev %s: unable to read RDB block %d\n", |
| 45 | bdevname(bdev, b), blk); | 44 | bdevname(state->bdev, b), blk); |
| 46 | res = -1; | 45 | res = -1; |
| 47 | goto rdb_done; | 46 | goto rdb_done; |
| 48 | } | 47 | } |
| @@ -64,7 +63,7 @@ amiga_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 64 | } | 63 | } |
| 65 | 64 | ||
| 66 | printk("Dev %s: RDB in block %d has bad checksum\n", | 65 | printk("Dev %s: RDB in block %d has bad checksum\n", |
| 67 | bdevname(bdev, b), blk); | 66 | bdevname(state->bdev, b), blk); |
| 68 | } | 67 | } |
| 69 | 68 | ||
| 70 | /* blksize is blocks per 512 byte standard block */ | 69 | /* blksize is blocks per 512 byte standard block */ |
| @@ -75,11 +74,11 @@ amiga_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 75 | put_dev_sector(sect); | 74 | put_dev_sector(sect); |
| 76 | for (part = 1; blk>0 && part<=16; part++, put_dev_sector(sect)) { | 75 | for (part = 1; blk>0 && part<=16; part++, put_dev_sector(sect)) { |
| 77 | blk *= blksize; /* Read in terms partition table understands */ | 76 | blk *= blksize; /* Read in terms partition table understands */ |
| 78 | data = read_dev_sector(bdev, blk, §); | 77 | data = read_part_sector(state, blk, §); |
| 79 | if (!data) { | 78 | if (!data) { |
| 80 | if (warn_no_part) | 79 | if (warn_no_part) |
| 81 | printk("Dev %s: unable to read partition block %d\n", | 80 | printk("Dev %s: unable to read partition block %d\n", |
| 82 | bdevname(bdev, b), blk); | 81 | bdevname(state->bdev, b), blk); |
| 83 | res = -1; | 82 | res = -1; |
| 84 | goto rdb_done; | 83 | goto rdb_done; |
| 85 | } | 84 | } |
diff --git a/fs/partitions/amiga.h b/fs/partitions/amiga.h index 2f3e9ce22d53..d094585cadaa 100644 --- a/fs/partitions/amiga.h +++ b/fs/partitions/amiga.h | |||
| @@ -2,5 +2,5 @@ | |||
| 2 | * fs/partitions/amiga.h | 2 | * fs/partitions/amiga.h |
| 3 | */ | 3 | */ |
| 4 | 4 | ||
| 5 | int amiga_partition(struct parsed_partitions *state, struct block_device *bdev); | 5 | int amiga_partition(struct parsed_partitions *state); |
| 6 | 6 | ||
diff --git a/fs/partitions/atari.c b/fs/partitions/atari.c index 1f3572d5b755..4439ff1b6cec 100644 --- a/fs/partitions/atari.c +++ b/fs/partitions/atari.c | |||
| @@ -30,7 +30,7 @@ static inline int OK_id(char *s) | |||
| 30 | memcmp (s, "RAW", 3) == 0 ; | 30 | memcmp (s, "RAW", 3) == 0 ; |
| 31 | } | 31 | } |
| 32 | 32 | ||
| 33 | int atari_partition(struct parsed_partitions *state, struct block_device *bdev) | 33 | int atari_partition(struct parsed_partitions *state) |
| 34 | { | 34 | { |
| 35 | Sector sect; | 35 | Sector sect; |
| 36 | struct rootsector *rs; | 36 | struct rootsector *rs; |
| @@ -42,12 +42,12 @@ int atari_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 42 | int part_fmt = 0; /* 0:unknown, 1:AHDI, 2:ICD/Supra */ | 42 | int part_fmt = 0; /* 0:unknown, 1:AHDI, 2:ICD/Supra */ |
| 43 | #endif | 43 | #endif |
| 44 | 44 | ||
| 45 | rs = (struct rootsector *) read_dev_sector(bdev, 0, §); | 45 | rs = read_part_sector(state, 0, §); |
| 46 | if (!rs) | 46 | if (!rs) |
| 47 | return -1; | 47 | return -1; |
| 48 | 48 | ||
| 49 | /* Verify this is an Atari rootsector: */ | 49 | /* Verify this is an Atari rootsector: */ |
| 50 | hd_size = bdev->bd_inode->i_size >> 9; | 50 | hd_size = state->bdev->bd_inode->i_size >> 9; |
| 51 | if (!VALID_PARTITION(&rs->part[0], hd_size) && | 51 | if (!VALID_PARTITION(&rs->part[0], hd_size) && |
| 52 | !VALID_PARTITION(&rs->part[1], hd_size) && | 52 | !VALID_PARTITION(&rs->part[1], hd_size) && |
| 53 | !VALID_PARTITION(&rs->part[2], hd_size) && | 53 | !VALID_PARTITION(&rs->part[2], hd_size) && |
| @@ -84,7 +84,7 @@ int atari_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 84 | printk(" XGM<"); | 84 | printk(" XGM<"); |
| 85 | partsect = extensect = be32_to_cpu(pi->st); | 85 | partsect = extensect = be32_to_cpu(pi->st); |
| 86 | while (1) { | 86 | while (1) { |
| 87 | xrs = (struct rootsector *)read_dev_sector(bdev, partsect, §2); | 87 | xrs = read_part_sector(state, partsect, §2); |
| 88 | if (!xrs) { | 88 | if (!xrs) { |
| 89 | printk (" block %ld read failed\n", partsect); | 89 | printk (" block %ld read failed\n", partsect); |
| 90 | put_dev_sector(sect); | 90 | put_dev_sector(sect); |
diff --git a/fs/partitions/atari.h b/fs/partitions/atari.h index 63186b00e135..fe2d32a89f36 100644 --- a/fs/partitions/atari.h +++ b/fs/partitions/atari.h | |||
| @@ -31,4 +31,4 @@ struct rootsector | |||
| 31 | u16 checksum; /* checksum for bootable disks */ | 31 | u16 checksum; /* checksum for bootable disks */ |
| 32 | } __attribute__((__packed__)); | 32 | } __attribute__((__packed__)); |
| 33 | 33 | ||
| 34 | int atari_partition(struct parsed_partitions *state, struct block_device *bdev); | 34 | int atari_partition(struct parsed_partitions *state); |
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 4f1fee0355ad..a19995c6f6af 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
| @@ -45,7 +45,7 @@ extern void md_autodetect_dev(dev_t dev); | |||
| 45 | 45 | ||
| 46 | int warn_no_part = 1; /*This is ugly: should make genhd removable media aware*/ | 46 | int warn_no_part = 1; /*This is ugly: should make genhd removable media aware*/ |
| 47 | 47 | ||
| 48 | static int (*check_part[])(struct parsed_partitions *, struct block_device *) = { | 48 | static int (*check_part[])(struct parsed_partitions *) = { |
| 49 | /* | 49 | /* |
| 50 | * Probe partition formats with tables at disk address 0 | 50 | * Probe partition formats with tables at disk address 0 |
| 51 | * that also have an ADFS boot block at 0xdc0. | 51 | * that also have an ADFS boot block at 0xdc0. |
| @@ -165,6 +165,7 @@ check_partition(struct gendisk *hd, struct block_device *bdev) | |||
| 165 | if (!state) | 165 | if (!state) |
| 166 | return NULL; | 166 | return NULL; |
| 167 | 167 | ||
| 168 | state->bdev = bdev; | ||
| 168 | disk_name(hd, 0, state->name); | 169 | disk_name(hd, 0, state->name); |
| 169 | printk(KERN_INFO " %s:", state->name); | 170 | printk(KERN_INFO " %s:", state->name); |
| 170 | if (isdigit(state->name[strlen(state->name)-1])) | 171 | if (isdigit(state->name[strlen(state->name)-1])) |
| @@ -174,7 +175,7 @@ check_partition(struct gendisk *hd, struct block_device *bdev) | |||
| 174 | i = res = err = 0; | 175 | i = res = err = 0; |
| 175 | while (!res && check_part[i]) { | 176 | while (!res && check_part[i]) { |
| 176 | memset(&state->parts, 0, sizeof(state->parts)); | 177 | memset(&state->parts, 0, sizeof(state->parts)); |
| 177 | res = check_part[i++](state, bdev); | 178 | res = check_part[i++](state); |
| 178 | if (res < 0) { | 179 | if (res < 0) { |
| 179 | /* We have hit an I/O error which we don't report now. | 180 | /* We have hit an I/O error which we don't report now. |
| 180 | * But record it, and let the others do their job. | 181 | * But record it, and let the others do their job. |
diff --git a/fs/partitions/check.h b/fs/partitions/check.h index 98dbe1a84528..4b31a97775be 100644 --- a/fs/partitions/check.h +++ b/fs/partitions/check.h | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | * description. | 6 | * description. |
| 7 | */ | 7 | */ |
| 8 | struct parsed_partitions { | 8 | struct parsed_partitions { |
| 9 | struct block_device *bdev; | ||
| 9 | char name[BDEVNAME_SIZE]; | 10 | char name[BDEVNAME_SIZE]; |
| 10 | struct { | 11 | struct { |
| 11 | sector_t from; | 12 | sector_t from; |
| @@ -16,6 +17,12 @@ struct parsed_partitions { | |||
| 16 | int limit; | 17 | int limit; |
| 17 | }; | 18 | }; |
| 18 | 19 | ||
| 20 | static inline void *read_part_sector(struct parsed_partitions *state, | ||
| 21 | sector_t n, Sector *p) | ||
| 22 | { | ||
| 23 | return read_dev_sector(state->bdev, n, p); | ||
| 24 | } | ||
| 25 | |||
| 19 | static inline void | 26 | static inline void |
| 20 | put_partition(struct parsed_partitions *p, int n, sector_t from, sector_t size) | 27 | put_partition(struct parsed_partitions *p, int n, sector_t from, sector_t size) |
| 21 | { | 28 | { |
diff --git a/fs/partitions/efi.c b/fs/partitions/efi.c index 91babdae7587..9e346c19bbba 100644 --- a/fs/partitions/efi.c +++ b/fs/partitions/efi.c | |||
| @@ -140,8 +140,7 @@ efi_crc32(const void *buf, unsigned long len) | |||
| 140 | * the part[0] entry for this disk, and is the number of | 140 | * the part[0] entry for this disk, and is the number of |
| 141 | * physical sectors available on the disk. | 141 | * physical sectors available on the disk. |
| 142 | */ | 142 | */ |
| 143 | static u64 | 143 | static u64 last_lba(struct block_device *bdev) |
| 144 | last_lba(struct block_device *bdev) | ||
| 145 | { | 144 | { |
| 146 | if (!bdev || !bdev->bd_inode) | 145 | if (!bdev || !bdev->bd_inode) |
| 147 | return 0; | 146 | return 0; |
| @@ -181,27 +180,28 @@ is_pmbr_valid(legacy_mbr *mbr) | |||
| 181 | 180 | ||
| 182 | /** | 181 | /** |
| 183 | * read_lba(): Read bytes from disk, starting at given LBA | 182 | * read_lba(): Read bytes from disk, starting at given LBA |
| 184 | * @bdev | 183 | * @state |
| 185 | * @lba | 184 | * @lba |
| 186 | * @buffer | 185 | * @buffer |
| 187 | * @size_t | 186 | * @size_t |
| 188 | * | 187 | * |
| 189 | * Description: Reads @count bytes from @bdev into @buffer. | 188 | * Description: Reads @count bytes from @state->bdev into @buffer. |
| 190 | * Returns number of bytes read on success, 0 on error. | 189 | * Returns number of bytes read on success, 0 on error. |
| 191 | */ | 190 | */ |
| 192 | static size_t | 191 | static size_t read_lba(struct parsed_partitions *state, |
| 193 | read_lba(struct block_device *bdev, u64 lba, u8 * buffer, size_t count) | 192 | u64 lba, u8 *buffer, size_t count) |
| 194 | { | 193 | { |
| 195 | size_t totalreadcount = 0; | 194 | size_t totalreadcount = 0; |
| 195 | struct block_device *bdev = state->bdev; | ||
| 196 | sector_t n = lba * (bdev_logical_block_size(bdev) / 512); | 196 | sector_t n = lba * (bdev_logical_block_size(bdev) / 512); |
| 197 | 197 | ||
| 198 | if (!bdev || !buffer || lba > last_lba(bdev)) | 198 | if (!buffer || lba > last_lba(bdev)) |
| 199 | return 0; | 199 | return 0; |
| 200 | 200 | ||
| 201 | while (count) { | 201 | while (count) { |
| 202 | int copied = 512; | 202 | int copied = 512; |
| 203 | Sector sect; | 203 | Sector sect; |
| 204 | unsigned char *data = read_dev_sector(bdev, n++, §); | 204 | unsigned char *data = read_part_sector(state, n++, §); |
| 205 | if (!data) | 205 | if (!data) |
| 206 | break; | 206 | break; |
| 207 | if (copied > count) | 207 | if (copied > count) |
| @@ -217,19 +217,20 @@ read_lba(struct block_device *bdev, u64 lba, u8 * buffer, size_t count) | |||
| 217 | 217 | ||
| 218 | /** | 218 | /** |
| 219 | * alloc_read_gpt_entries(): reads partition entries from disk | 219 | * alloc_read_gpt_entries(): reads partition entries from disk |
| 220 | * @bdev | 220 | * @state |
| 221 | * @gpt - GPT header | 221 | * @gpt - GPT header |
| 222 | * | 222 | * |
| 223 | * Description: Returns ptes on success, NULL on error. | 223 | * Description: Returns ptes on success, NULL on error. |
| 224 | * Allocates space for PTEs based on information found in @gpt. | 224 | * Allocates space for PTEs based on information found in @gpt. |
| 225 | * Notes: remember to free pte when you're done! | 225 | * Notes: remember to free pte when you're done! |
| 226 | */ | 226 | */ |
| 227 | static gpt_entry * | 227 | static gpt_entry *alloc_read_gpt_entries(struct parsed_partitions *state, |
| 228 | alloc_read_gpt_entries(struct block_device *bdev, gpt_header *gpt) | 228 | gpt_header *gpt) |
| 229 | { | 229 | { |
| 230 | size_t count; | 230 | size_t count; |
| 231 | gpt_entry *pte; | 231 | gpt_entry *pte; |
| 232 | if (!bdev || !gpt) | 232 | |
| 233 | if (!gpt) | ||
| 233 | return NULL; | 234 | return NULL; |
| 234 | 235 | ||
| 235 | count = le32_to_cpu(gpt->num_partition_entries) * | 236 | count = le32_to_cpu(gpt->num_partition_entries) * |
| @@ -240,7 +241,7 @@ alloc_read_gpt_entries(struct block_device *bdev, gpt_header *gpt) | |||
| 240 | if (!pte) | 241 | if (!pte) |
| 241 | return NULL; | 242 | return NULL; |
| 242 | 243 | ||
| 243 | if (read_lba(bdev, le64_to_cpu(gpt->partition_entry_lba), | 244 | if (read_lba(state, le64_to_cpu(gpt->partition_entry_lba), |
| 244 | (u8 *) pte, | 245 | (u8 *) pte, |
| 245 | count) < count) { | 246 | count) < count) { |
| 246 | kfree(pte); | 247 | kfree(pte); |
| @@ -252,27 +253,24 @@ alloc_read_gpt_entries(struct block_device *bdev, gpt_header *gpt) | |||
| 252 | 253 | ||
| 253 | /** | 254 | /** |
| 254 | * alloc_read_gpt_header(): Allocates GPT header, reads into it from disk | 255 | * alloc_read_gpt_header(): Allocates GPT header, reads into it from disk |
| 255 | * @bdev | 256 | * @state |
| 256 | * @lba is the Logical Block Address of the partition table | 257 | * @lba is the Logical Block Address of the partition table |
| 257 | * | 258 | * |
| 258 | * Description: returns GPT header on success, NULL on error. Allocates | 259 | * Description: returns GPT header on success, NULL on error. Allocates |
| 259 | * and fills a GPT header starting at @ from @bdev. | 260 | * and fills a GPT header starting at @ from @state->bdev. |
| 260 | * Note: remember to free gpt when finished with it. | 261 | * Note: remember to free gpt when finished with it. |
| 261 | */ | 262 | */ |
| 262 | static gpt_header * | 263 | static gpt_header *alloc_read_gpt_header(struct parsed_partitions *state, |
| 263 | alloc_read_gpt_header(struct block_device *bdev, u64 lba) | 264 | u64 lba) |
| 264 | { | 265 | { |
| 265 | gpt_header *gpt; | 266 | gpt_header *gpt; |
| 266 | unsigned ssz = bdev_logical_block_size(bdev); | 267 | unsigned ssz = bdev_logical_block_size(state->bdev); |
| 267 | |||
| 268 | if (!bdev) | ||
| 269 | return NULL; | ||
| 270 | 268 | ||
| 271 | gpt = kzalloc(ssz, GFP_KERNEL); | 269 | gpt = kzalloc(ssz, GFP_KERNEL); |
| 272 | if (!gpt) | 270 | if (!gpt) |
| 273 | return NULL; | 271 | return NULL; |
| 274 | 272 | ||
| 275 | if (read_lba(bdev, lba, (u8 *) gpt, ssz) < ssz) { | 273 | if (read_lba(state, lba, (u8 *) gpt, ssz) < ssz) { |
| 276 | kfree(gpt); | 274 | kfree(gpt); |
| 277 | gpt=NULL; | 275 | gpt=NULL; |
| 278 | return NULL; | 276 | return NULL; |
| @@ -283,7 +281,7 @@ alloc_read_gpt_header(struct block_device *bdev, u64 lba) | |||
| 283 | 281 | ||
| 284 | /** | 282 | /** |
| 285 | * is_gpt_valid() - tests one GPT header and PTEs for validity | 283 | * is_gpt_valid() - tests one GPT header and PTEs for validity |
| 286 | * @bdev | 284 | * @state |
| 287 | * @lba is the logical block address of the GPT header to test | 285 | * @lba is the logical block address of the GPT header to test |
| 288 | * @gpt is a GPT header ptr, filled on return. | 286 | * @gpt is a GPT header ptr, filled on return. |
| 289 | * @ptes is a PTEs ptr, filled on return. | 287 | * @ptes is a PTEs ptr, filled on return. |
| @@ -291,16 +289,15 @@ alloc_read_gpt_header(struct block_device *bdev, u64 lba) | |||
| 291 | * Description: returns 1 if valid, 0 on error. | 289 | * Description: returns 1 if valid, 0 on error. |
| 292 | * If valid, returns pointers to newly allocated GPT header and PTEs. | 290 | * If valid, returns pointers to newly allocated GPT header and PTEs. |
| 293 | */ | 291 | */ |
| 294 | static int | 292 | static int is_gpt_valid(struct parsed_partitions *state, u64 lba, |
| 295 | is_gpt_valid(struct block_device *bdev, u64 lba, | 293 | gpt_header **gpt, gpt_entry **ptes) |
| 296 | gpt_header **gpt, gpt_entry **ptes) | ||
| 297 | { | 294 | { |
| 298 | u32 crc, origcrc; | 295 | u32 crc, origcrc; |
| 299 | u64 lastlba; | 296 | u64 lastlba; |
| 300 | 297 | ||
| 301 | if (!bdev || !gpt || !ptes) | 298 | if (!ptes) |
| 302 | return 0; | 299 | return 0; |
| 303 | if (!(*gpt = alloc_read_gpt_header(bdev, lba))) | 300 | if (!(*gpt = alloc_read_gpt_header(state, lba))) |
| 304 | return 0; | 301 | return 0; |
| 305 | 302 | ||
| 306 | /* Check the GUID Partition Table signature */ | 303 | /* Check the GUID Partition Table signature */ |
| @@ -336,7 +333,7 @@ is_gpt_valid(struct block_device *bdev, u64 lba, | |||
| 336 | /* Check the first_usable_lba and last_usable_lba are | 333 | /* Check the first_usable_lba and last_usable_lba are |
| 337 | * within the disk. | 334 | * within the disk. |
| 338 | */ | 335 | */ |
| 339 | lastlba = last_lba(bdev); | 336 | lastlba = last_lba(state->bdev); |
| 340 | if (le64_to_cpu((*gpt)->first_usable_lba) > lastlba) { | 337 | if (le64_to_cpu((*gpt)->first_usable_lba) > lastlba) { |
| 341 | pr_debug("GPT: first_usable_lba incorrect: %lld > %lld\n", | 338 | pr_debug("GPT: first_usable_lba incorrect: %lld > %lld\n", |
| 342 | (unsigned long long)le64_to_cpu((*gpt)->first_usable_lba), | 339 | (unsigned long long)le64_to_cpu((*gpt)->first_usable_lba), |
| @@ -350,7 +347,7 @@ is_gpt_valid(struct block_device *bdev, u64 lba, | |||
| 350 | goto fail; | 347 | goto fail; |
| 351 | } | 348 | } |
| 352 | 349 | ||
| 353 | if (!(*ptes = alloc_read_gpt_entries(bdev, *gpt))) | 350 | if (!(*ptes = alloc_read_gpt_entries(state, *gpt))) |
| 354 | goto fail; | 351 | goto fail; |
| 355 | 352 | ||
| 356 | /* Check the GUID Partition Entry Array CRC */ | 353 | /* Check the GUID Partition Entry Array CRC */ |
| @@ -495,7 +492,7 @@ compare_gpts(gpt_header *pgpt, gpt_header *agpt, u64 lastlba) | |||
| 495 | 492 | ||
| 496 | /** | 493 | /** |
| 497 | * find_valid_gpt() - Search disk for valid GPT headers and PTEs | 494 | * find_valid_gpt() - Search disk for valid GPT headers and PTEs |
| 498 | * @bdev | 495 | * @state |
| 499 | * @gpt is a GPT header ptr, filled on return. | 496 | * @gpt is a GPT header ptr, filled on return. |
| 500 | * @ptes is a PTEs ptr, filled on return. | 497 | * @ptes is a PTEs ptr, filled on return. |
| 501 | * Description: Returns 1 if valid, 0 on error. | 498 | * Description: Returns 1 if valid, 0 on error. |
| @@ -508,24 +505,25 @@ compare_gpts(gpt_header *pgpt, gpt_header *agpt, u64 lastlba) | |||
| 508 | * This protects against devices which misreport their size, and forces | 505 | * This protects against devices which misreport their size, and forces |
| 509 | * the user to decide to use the Alternate GPT. | 506 | * the user to decide to use the Alternate GPT. |
| 510 | */ | 507 | */ |
| 511 | static int | 508 | static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt, |
| 512 | find_valid_gpt(struct block_device *bdev, gpt_header **gpt, gpt_entry **ptes) | 509 | gpt_entry **ptes) |
| 513 | { | 510 | { |
| 514 | int good_pgpt = 0, good_agpt = 0, good_pmbr = 0; | 511 | int good_pgpt = 0, good_agpt = 0, good_pmbr = 0; |
| 515 | gpt_header *pgpt = NULL, *agpt = NULL; | 512 | gpt_header *pgpt = NULL, *agpt = NULL; |
| 516 | gpt_entry *pptes = NULL, *aptes = NULL; | 513 | gpt_entry *pptes = NULL, *aptes = NULL; |
| 517 | legacy_mbr *legacymbr; | 514 | legacy_mbr *legacymbr; |
| 518 | u64 lastlba; | 515 | u64 lastlba; |
| 519 | if (!bdev || !gpt || !ptes) | 516 | |
| 517 | if (!ptes) | ||
| 520 | return 0; | 518 | return 0; |
| 521 | 519 | ||
| 522 | lastlba = last_lba(bdev); | 520 | lastlba = last_lba(state->bdev); |
| 523 | if (!force_gpt) { | 521 | if (!force_gpt) { |
| 524 | /* This will be added to the EFI Spec. per Intel after v1.02. */ | 522 | /* This will be added to the EFI Spec. per Intel after v1.02. */ |
| 525 | legacymbr = kzalloc(sizeof (*legacymbr), GFP_KERNEL); | 523 | legacymbr = kzalloc(sizeof (*legacymbr), GFP_KERNEL); |
| 526 | if (legacymbr) { | 524 | if (legacymbr) { |
| 527 | read_lba(bdev, 0, (u8 *) legacymbr, | 525 | read_lba(state, 0, (u8 *) legacymbr, |
| 528 | sizeof (*legacymbr)); | 526 | sizeof (*legacymbr)); |
| 529 | good_pmbr = is_pmbr_valid(legacymbr); | 527 | good_pmbr = is_pmbr_valid(legacymbr); |
| 530 | kfree(legacymbr); | 528 | kfree(legacymbr); |
| 531 | } | 529 | } |
| @@ -533,15 +531,14 @@ find_valid_gpt(struct block_device *bdev, gpt_header **gpt, gpt_entry **ptes) | |||
| 533 | goto fail; | 531 | goto fail; |
| 534 | } | 532 | } |
| 535 | 533 | ||
| 536 | good_pgpt = is_gpt_valid(bdev, GPT_PRIMARY_PARTITION_TABLE_LBA, | 534 | good_pgpt = is_gpt_valid(state, GPT_PRIMARY_PARTITION_TABLE_LBA, |
| 537 | &pgpt, &pptes); | 535 | &pgpt, &pptes); |
| 538 | if (good_pgpt) | 536 | if (good_pgpt) |
| 539 | good_agpt = is_gpt_valid(bdev, | 537 | good_agpt = is_gpt_valid(state, |
| 540 | le64_to_cpu(pgpt->alternate_lba), | 538 | le64_to_cpu(pgpt->alternate_lba), |
| 541 | &agpt, &aptes); | 539 | &agpt, &aptes); |
| 542 | if (!good_agpt && force_gpt) | 540 | if (!good_agpt && force_gpt) |
| 543 | good_agpt = is_gpt_valid(bdev, lastlba, | 541 | good_agpt = is_gpt_valid(state, lastlba, &agpt, &aptes); |
| 544 | &agpt, &aptes); | ||
| 545 | 542 | ||
| 546 | /* The obviously unsuccessful case */ | 543 | /* The obviously unsuccessful case */ |
| 547 | if (!good_pgpt && !good_agpt) | 544 | if (!good_pgpt && !good_agpt) |
| @@ -583,9 +580,8 @@ find_valid_gpt(struct block_device *bdev, gpt_header **gpt, gpt_entry **ptes) | |||
| 583 | } | 580 | } |
| 584 | 581 | ||
| 585 | /** | 582 | /** |
| 586 | * efi_partition(struct parsed_partitions *state, struct block_device *bdev) | 583 | * efi_partition(struct parsed_partitions *state) |
| 587 | * @state | 584 | * @state |
| 588 | * @bdev | ||
| 589 | * | 585 | * |
| 590 | * Description: called from check.c, if the disk contains GPT | 586 | * Description: called from check.c, if the disk contains GPT |
| 591 | * partitions, sets up partition entries in the kernel. | 587 | * partitions, sets up partition entries in the kernel. |
| @@ -602,15 +598,14 @@ find_valid_gpt(struct block_device *bdev, gpt_header **gpt, gpt_entry **ptes) | |||
| 602 | * 1 if successful | 598 | * 1 if successful |
| 603 | * | 599 | * |
| 604 | */ | 600 | */ |
| 605 | int | 601 | int efi_partition(struct parsed_partitions *state) |
| 606 | efi_partition(struct parsed_partitions *state, struct block_device *bdev) | ||
| 607 | { | 602 | { |
| 608 | gpt_header *gpt = NULL; | 603 | gpt_header *gpt = NULL; |
| 609 | gpt_entry *ptes = NULL; | 604 | gpt_entry *ptes = NULL; |
| 610 | u32 i; | 605 | u32 i; |
| 611 | unsigned ssz = bdev_logical_block_size(bdev) / 512; | 606 | unsigned ssz = bdev_logical_block_size(state->bdev) / 512; |
| 612 | 607 | ||
| 613 | if (!find_valid_gpt(bdev, &gpt, &ptes) || !gpt || !ptes) { | 608 | if (!find_valid_gpt(state, &gpt, &ptes) || !gpt || !ptes) { |
| 614 | kfree(gpt); | 609 | kfree(gpt); |
| 615 | kfree(ptes); | 610 | kfree(ptes); |
| 616 | return 0; | 611 | return 0; |
| @@ -623,7 +618,7 @@ efi_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 623 | u64 size = le64_to_cpu(ptes[i].ending_lba) - | 618 | u64 size = le64_to_cpu(ptes[i].ending_lba) - |
| 624 | le64_to_cpu(ptes[i].starting_lba) + 1ULL; | 619 | le64_to_cpu(ptes[i].starting_lba) + 1ULL; |
| 625 | 620 | ||
| 626 | if (!is_pte_valid(&ptes[i], last_lba(bdev))) | 621 | if (!is_pte_valid(&ptes[i], last_lba(state->bdev))) |
| 627 | continue; | 622 | continue; |
| 628 | 623 | ||
| 629 | put_partition(state, i+1, start * ssz, size * ssz); | 624 | put_partition(state, i+1, start * ssz, size * ssz); |
diff --git a/fs/partitions/efi.h b/fs/partitions/efi.h index 6998b589abf9..b69ab729558f 100644 --- a/fs/partitions/efi.h +++ b/fs/partitions/efi.h | |||
| @@ -110,7 +110,7 @@ typedef struct _legacy_mbr { | |||
| 110 | } __attribute__ ((packed)) legacy_mbr; | 110 | } __attribute__ ((packed)) legacy_mbr; |
| 111 | 111 | ||
| 112 | /* Functions */ | 112 | /* Functions */ |
| 113 | extern int efi_partition(struct parsed_partitions *state, struct block_device *bdev); | 113 | extern int efi_partition(struct parsed_partitions *state); |
| 114 | 114 | ||
| 115 | #endif | 115 | #endif |
| 116 | 116 | ||
diff --git a/fs/partitions/ibm.c b/fs/partitions/ibm.c index fc71aab08460..3e73de5967ff 100644 --- a/fs/partitions/ibm.c +++ b/fs/partitions/ibm.c | |||
| @@ -58,9 +58,9 @@ cchhb2blk (struct vtoc_cchhb *ptr, struct hd_geometry *geo) { | |||
| 58 | 58 | ||
| 59 | /* | 59 | /* |
| 60 | */ | 60 | */ |
| 61 | int | 61 | int ibm_partition(struct parsed_partitions *state) |
| 62 | ibm_partition(struct parsed_partitions *state, struct block_device *bdev) | ||
| 63 | { | 62 | { |
| 63 | struct block_device *bdev = state->bdev; | ||
| 64 | int blocksize, res; | 64 | int blocksize, res; |
| 65 | loff_t i_size, offset, size, fmt_size; | 65 | loff_t i_size, offset, size, fmt_size; |
| 66 | dasd_information2_t *info; | 66 | dasd_information2_t *info; |
| @@ -100,7 +100,8 @@ ibm_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 100 | /* | 100 | /* |
| 101 | * Get volume label, extract name and type. | 101 | * Get volume label, extract name and type. |
| 102 | */ | 102 | */ |
| 103 | data = read_dev_sector(bdev, info->label_block*(blocksize/512), §); | 103 | data = read_part_sector(state, info->label_block*(blocksize/512), |
| 104 | §); | ||
| 104 | if (data == NULL) | 105 | if (data == NULL) |
| 105 | goto out_readerr; | 106 | goto out_readerr; |
| 106 | 107 | ||
| @@ -193,8 +194,8 @@ ibm_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 193 | */ | 194 | */ |
| 194 | blk = cchhb2blk(&label->vol.vtoc, geo) + 1; | 195 | blk = cchhb2blk(&label->vol.vtoc, geo) + 1; |
| 195 | counter = 0; | 196 | counter = 0; |
| 196 | data = read_dev_sector(bdev, blk * (blocksize/512), | 197 | data = read_part_sector(state, blk * (blocksize/512), |
| 197 | §); | 198 | §); |
| 198 | while (data != NULL) { | 199 | while (data != NULL) { |
| 199 | struct vtoc_format1_label f1; | 200 | struct vtoc_format1_label f1; |
| 200 | 201 | ||
| @@ -208,9 +209,8 @@ ibm_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 208 | || f1.DS1FMTID == _ascebc['7'] | 209 | || f1.DS1FMTID == _ascebc['7'] |
| 209 | || f1.DS1FMTID == _ascebc['9']) { | 210 | || f1.DS1FMTID == _ascebc['9']) { |
| 210 | blk++; | 211 | blk++; |
| 211 | data = read_dev_sector(bdev, blk * | 212 | data = read_part_sector(state, |
| 212 | (blocksize/512), | 213 | blk * (blocksize/512), §); |
| 213 | §); | ||
| 214 | continue; | 214 | continue; |
| 215 | } | 215 | } |
| 216 | 216 | ||
| @@ -230,9 +230,8 @@ ibm_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 230 | size * (blocksize >> 9)); | 230 | size * (blocksize >> 9)); |
| 231 | counter++; | 231 | counter++; |
| 232 | blk++; | 232 | blk++; |
| 233 | data = read_dev_sector(bdev, | 233 | data = read_part_sector(state, |
| 234 | blk * (blocksize/512), | 234 | blk * (blocksize/512), §); |
| 235 | §); | ||
| 236 | } | 235 | } |
| 237 | 236 | ||
| 238 | if (!data) | 237 | if (!data) |
diff --git a/fs/partitions/ibm.h b/fs/partitions/ibm.h index 31f85a6ac459..08fb0804a812 100644 --- a/fs/partitions/ibm.h +++ b/fs/partitions/ibm.h | |||
| @@ -1 +1 @@ | |||
| int ibm_partition(struct parsed_partitions *, struct block_device *); | int ibm_partition(struct parsed_partitions *); | ||
diff --git a/fs/partitions/karma.c b/fs/partitions/karma.c index 176d89bcf123..1cc928bb762f 100644 --- a/fs/partitions/karma.c +++ b/fs/partitions/karma.c | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | #include "check.h" | 9 | #include "check.h" |
| 10 | #include "karma.h" | 10 | #include "karma.h" |
| 11 | 11 | ||
| 12 | int karma_partition(struct parsed_partitions *state, struct block_device *bdev) | 12 | int karma_partition(struct parsed_partitions *state) |
| 13 | { | 13 | { |
| 14 | int i; | 14 | int i; |
| 15 | int slot = 1; | 15 | int slot = 1; |
| @@ -29,7 +29,7 @@ int karma_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 29 | } __attribute__((packed)) *label; | 29 | } __attribute__((packed)) *label; |
| 30 | struct d_partition *p; | 30 | struct d_partition *p; |
| 31 | 31 | ||
| 32 | data = read_dev_sector(bdev, 0, §); | 32 | data = read_part_sector(state, 0, §); |
| 33 | if (!data) | 33 | if (!data) |
| 34 | return -1; | 34 | return -1; |
| 35 | 35 | ||
diff --git a/fs/partitions/karma.h b/fs/partitions/karma.h index ecf7d3f2a3d8..c764b2e9df21 100644 --- a/fs/partitions/karma.h +++ b/fs/partitions/karma.h | |||
| @@ -4,5 +4,5 @@ | |||
| 4 | 4 | ||
| 5 | #define KARMA_LABEL_MAGIC 0xAB56 | 5 | #define KARMA_LABEL_MAGIC 0xAB56 |
| 6 | 6 | ||
| 7 | int karma_partition(struct parsed_partitions *state, struct block_device *bdev); | 7 | int karma_partition(struct parsed_partitions *state); |
| 8 | 8 | ||
diff --git a/fs/partitions/ldm.c b/fs/partitions/ldm.c index 8652fb99e962..3ceca05b668c 100644 --- a/fs/partitions/ldm.c +++ b/fs/partitions/ldm.c | |||
| @@ -309,7 +309,7 @@ static bool ldm_compare_tocblocks (const struct tocblock *toc1, | |||
| 309 | 309 | ||
| 310 | /** | 310 | /** |
| 311 | * ldm_validate_privheads - Compare the primary privhead with its backups | 311 | * ldm_validate_privheads - Compare the primary privhead with its backups |
| 312 | * @bdev: Device holding the LDM Database | 312 | * @state: Partition check state including device holding the LDM Database |
| 313 | * @ph1: Memory struct to fill with ph contents | 313 | * @ph1: Memory struct to fill with ph contents |
| 314 | * | 314 | * |
| 315 | * Read and compare all three privheads from disk. | 315 | * Read and compare all three privheads from disk. |
| @@ -321,8 +321,8 @@ static bool ldm_compare_tocblocks (const struct tocblock *toc1, | |||
| 321 | * Return: 'true' Success | 321 | * Return: 'true' Success |
| 322 | * 'false' Error | 322 | * 'false' Error |
| 323 | */ | 323 | */ |
| 324 | static bool ldm_validate_privheads (struct block_device *bdev, | 324 | static bool ldm_validate_privheads(struct parsed_partitions *state, |
| 325 | struct privhead *ph1) | 325 | struct privhead *ph1) |
| 326 | { | 326 | { |
| 327 | static const int off[3] = { OFF_PRIV1, OFF_PRIV2, OFF_PRIV3 }; | 327 | static const int off[3] = { OFF_PRIV1, OFF_PRIV2, OFF_PRIV3 }; |
| 328 | struct privhead *ph[3] = { ph1 }; | 328 | struct privhead *ph[3] = { ph1 }; |
| @@ -332,7 +332,7 @@ static bool ldm_validate_privheads (struct block_device *bdev, | |||
| 332 | long num_sects; | 332 | long num_sects; |
| 333 | int i; | 333 | int i; |
| 334 | 334 | ||
| 335 | BUG_ON (!bdev || !ph1); | 335 | BUG_ON (!state || !ph1); |
| 336 | 336 | ||
| 337 | ph[1] = kmalloc (sizeof (*ph[1]), GFP_KERNEL); | 337 | ph[1] = kmalloc (sizeof (*ph[1]), GFP_KERNEL); |
| 338 | ph[2] = kmalloc (sizeof (*ph[2]), GFP_KERNEL); | 338 | ph[2] = kmalloc (sizeof (*ph[2]), GFP_KERNEL); |
| @@ -346,8 +346,8 @@ static bool ldm_validate_privheads (struct block_device *bdev, | |||
| 346 | 346 | ||
| 347 | /* Read and parse privheads */ | 347 | /* Read and parse privheads */ |
| 348 | for (i = 0; i < 3; i++) { | 348 | for (i = 0; i < 3; i++) { |
| 349 | data = read_dev_sector (bdev, | 349 | data = read_part_sector(state, ph[0]->config_start + off[i], |
| 350 | ph[0]->config_start + off[i], §); | 350 | §); |
| 351 | if (!data) { | 351 | if (!data) { |
| 352 | ldm_crit ("Disk read failed."); | 352 | ldm_crit ("Disk read failed."); |
| 353 | goto out; | 353 | goto out; |
| @@ -363,7 +363,7 @@ static bool ldm_validate_privheads (struct block_device *bdev, | |||
| 363 | } | 363 | } |
| 364 | } | 364 | } |
| 365 | 365 | ||
| 366 | num_sects = bdev->bd_inode->i_size >> 9; | 366 | num_sects = state->bdev->bd_inode->i_size >> 9; |
| 367 | 367 | ||
| 368 | if ((ph[0]->config_start > num_sects) || | 368 | if ((ph[0]->config_start > num_sects) || |
| 369 | ((ph[0]->config_start + ph[0]->config_size) > num_sects)) { | 369 | ((ph[0]->config_start + ph[0]->config_size) > num_sects)) { |
| @@ -397,20 +397,20 @@ out: | |||
| 397 | 397 | ||
| 398 | /** | 398 | /** |
| 399 | * ldm_validate_tocblocks - Validate the table of contents and its backups | 399 | * ldm_validate_tocblocks - Validate the table of contents and its backups |
| 400 | * @bdev: Device holding the LDM Database | 400 | * @state: Partition check state including device holding the LDM Database |
| 401 | * @base: Offset, into @bdev, of the database | 401 | * @base: Offset, into @state->bdev, of the database |
| 402 | * @ldb: Cache of the database structures | 402 | * @ldb: Cache of the database structures |
| 403 | * | 403 | * |
| 404 | * Find and compare the four tables of contents of the LDM Database stored on | 404 | * Find and compare the four tables of contents of the LDM Database stored on |
| 405 | * @bdev and return the parsed information into @toc1. | 405 | * @state->bdev and return the parsed information into @toc1. |
| 406 | * | 406 | * |
| 407 | * The offsets and sizes of the configs are range-checked against a privhead. | 407 | * The offsets and sizes of the configs are range-checked against a privhead. |
| 408 | * | 408 | * |
| 409 | * Return: 'true' @toc1 contains validated TOCBLOCK info | 409 | * Return: 'true' @toc1 contains validated TOCBLOCK info |
| 410 | * 'false' @toc1 contents are undefined | 410 | * 'false' @toc1 contents are undefined |
| 411 | */ | 411 | */ |
| 412 | static bool ldm_validate_tocblocks(struct block_device *bdev, | 412 | static bool ldm_validate_tocblocks(struct parsed_partitions *state, |
| 413 | unsigned long base, struct ldmdb *ldb) | 413 | unsigned long base, struct ldmdb *ldb) |
| 414 | { | 414 | { |
| 415 | static const int off[4] = { OFF_TOCB1, OFF_TOCB2, OFF_TOCB3, OFF_TOCB4}; | 415 | static const int off[4] = { OFF_TOCB1, OFF_TOCB2, OFF_TOCB3, OFF_TOCB4}; |
| 416 | struct tocblock *tb[4]; | 416 | struct tocblock *tb[4]; |
| @@ -420,7 +420,7 @@ static bool ldm_validate_tocblocks(struct block_device *bdev, | |||
| 420 | int i, nr_tbs; | 420 | int i, nr_tbs; |
| 421 | bool result = false; | 421 | bool result = false; |
| 422 | 422 | ||
| 423 | BUG_ON(!bdev || !ldb); | 423 | BUG_ON(!state || !ldb); |
| 424 | ph = &ldb->ph; | 424 | ph = &ldb->ph; |
| 425 | tb[0] = &ldb->toc; | 425 | tb[0] = &ldb->toc; |
| 426 | tb[1] = kmalloc(sizeof(*tb[1]) * 3, GFP_KERNEL); | 426 | tb[1] = kmalloc(sizeof(*tb[1]) * 3, GFP_KERNEL); |
| @@ -437,7 +437,7 @@ static bool ldm_validate_tocblocks(struct block_device *bdev, | |||
| 437 | * skip any that fail as long as we get at least one valid TOCBLOCK. | 437 | * skip any that fail as long as we get at least one valid TOCBLOCK. |
| 438 | */ | 438 | */ |
| 439 | for (nr_tbs = i = 0; i < 4; i++) { | 439 | for (nr_tbs = i = 0; i < 4; i++) { |
| 440 | data = read_dev_sector(bdev, base + off[i], §); | 440 | data = read_part_sector(state, base + off[i], §); |
| 441 | if (!data) { | 441 | if (!data) { |
| 442 | ldm_error("Disk read failed for TOCBLOCK %d.", i); | 442 | ldm_error("Disk read failed for TOCBLOCK %d.", i); |
| 443 | continue; | 443 | continue; |
| @@ -473,7 +473,7 @@ err: | |||
| 473 | 473 | ||
| 474 | /** | 474 | /** |
| 475 | * ldm_validate_vmdb - Read the VMDB and validate it | 475 | * ldm_validate_vmdb - Read the VMDB and validate it |
| 476 | * @bdev: Device holding the LDM Database | 476 | * @state: Partition check state including device holding the LDM Database |
| 477 | * @base: Offset, into @bdev, of the database | 477 | * @base: Offset, into @bdev, of the database |
| 478 | * @ldb: Cache of the database structures | 478 | * @ldb: Cache of the database structures |
| 479 | * | 479 | * |
| @@ -483,8 +483,8 @@ err: | |||
| 483 | * Return: 'true' @ldb contains validated VBDB info | 483 | * Return: 'true' @ldb contains validated VBDB info |
| 484 | * 'false' @ldb contents are undefined | 484 | * 'false' @ldb contents are undefined |
| 485 | */ | 485 | */ |
| 486 | static bool ldm_validate_vmdb (struct block_device *bdev, unsigned long base, | 486 | static bool ldm_validate_vmdb(struct parsed_partitions *state, |
| 487 | struct ldmdb *ldb) | 487 | unsigned long base, struct ldmdb *ldb) |
| 488 | { | 488 | { |
| 489 | Sector sect; | 489 | Sector sect; |
| 490 | u8 *data; | 490 | u8 *data; |
| @@ -492,12 +492,12 @@ static bool ldm_validate_vmdb (struct block_device *bdev, unsigned long base, | |||
| 492 | struct vmdb *vm; | 492 | struct vmdb *vm; |
| 493 | struct tocblock *toc; | 493 | struct tocblock *toc; |
| 494 | 494 | ||
| 495 | BUG_ON (!bdev || !ldb); | 495 | BUG_ON (!state || !ldb); |
| 496 | 496 | ||
| 497 | vm = &ldb->vm; | 497 | vm = &ldb->vm; |
| 498 | toc = &ldb->toc; | 498 | toc = &ldb->toc; |
| 499 | 499 | ||
| 500 | data = read_dev_sector (bdev, base + OFF_VMDB, §); | 500 | data = read_part_sector(state, base + OFF_VMDB, §); |
| 501 | if (!data) { | 501 | if (!data) { |
| 502 | ldm_crit ("Disk read failed."); | 502 | ldm_crit ("Disk read failed."); |
| 503 | return false; | 503 | return false; |
| @@ -534,21 +534,21 @@ out: | |||
| 534 | 534 | ||
| 535 | /** | 535 | /** |
| 536 | * ldm_validate_partition_table - Determine whether bdev might be a dynamic disk | 536 | * ldm_validate_partition_table - Determine whether bdev might be a dynamic disk |
| 537 | * @bdev: Device holding the LDM Database | 537 | * @state: Partition check state including device holding the LDM Database |
| 538 | * | 538 | * |
| 539 | * This function provides a weak test to decide whether the device is a dynamic | 539 | * This function provides a weak test to decide whether the device is a dynamic |
| 540 | * disk or not. It looks for an MS-DOS-style partition table containing at | 540 | * disk or not. It looks for an MS-DOS-style partition table containing at |
| 541 | * least one partition of type 0x42 (formerly SFS, now used by Windows for | 541 | * least one partition of type 0x42 (formerly SFS, now used by Windows for |
| 542 | * dynamic disks). | 542 | * dynamic disks). |
| 543 | * | 543 | * |
| 544 | * N.B. The only possible error can come from the read_dev_sector and that is | 544 | * N.B. The only possible error can come from the read_part_sector and that is |
| 545 | * only likely to happen if the underlying device is strange. If that IS | 545 | * only likely to happen if the underlying device is strange. If that IS |
| 546 | * the case we should return zero to let someone else try. | 546 | * the case we should return zero to let someone else try. |
| 547 | * | 547 | * |
| 548 | * Return: 'true' @bdev is a dynamic disk | 548 | * Return: 'true' @state->bdev is a dynamic disk |
| 549 | * 'false' @bdev is not a dynamic disk, or an error occurred | 549 | * 'false' @state->bdev is not a dynamic disk, or an error occurred |
| 550 | */ | 550 | */ |
| 551 | static bool ldm_validate_partition_table (struct block_device *bdev) | 551 | static bool ldm_validate_partition_table(struct parsed_partitions *state) |
| 552 | { | 552 | { |
| 553 | Sector sect; | 553 | Sector sect; |
| 554 | u8 *data; | 554 | u8 *data; |
| @@ -556,9 +556,9 @@ static bool ldm_validate_partition_table (struct block_device *bdev) | |||
| 556 | int i; | 556 | int i; |
| 557 | bool result = false; | 557 | bool result = false; |
| 558 | 558 | ||
| 559 | BUG_ON (!bdev); | 559 | BUG_ON(!state); |
| 560 | 560 | ||
| 561 | data = read_dev_sector (bdev, 0, §); | 561 | data = read_part_sector(state, 0, §); |
| 562 | if (!data) { | 562 | if (!data) { |
| 563 | ldm_crit ("Disk read failed."); | 563 | ldm_crit ("Disk read failed."); |
| 564 | return false; | 564 | return false; |
| @@ -1391,8 +1391,8 @@ static bool ldm_frag_commit (struct list_head *frags, struct ldmdb *ldb) | |||
| 1391 | 1391 | ||
| 1392 | /** | 1392 | /** |
| 1393 | * ldm_get_vblks - Read the on-disk database of VBLKs into memory | 1393 | * ldm_get_vblks - Read the on-disk database of VBLKs into memory |
| 1394 | * @bdev: Device holding the LDM Database | 1394 | * @state: Partition check state including device holding the LDM Database |
| 1395 | * @base: Offset, into @bdev, of the database | 1395 | * @base: Offset, into @state->bdev, of the database |
| 1396 | * @ldb: Cache of the database structures | 1396 | * @ldb: Cache of the database structures |
| 1397 | * | 1397 | * |
| 1398 | * To use the information from the VBLKs, they need to be read from the disk, | 1398 | * To use the information from the VBLKs, they need to be read from the disk, |
| @@ -1401,8 +1401,8 @@ static bool ldm_frag_commit (struct list_head *frags, struct ldmdb *ldb) | |||
| 1401 | * Return: 'true' All the VBLKs were read successfully | 1401 | * Return: 'true' All the VBLKs were read successfully |
| 1402 | * 'false' An error occurred | 1402 | * 'false' An error occurred |
| 1403 | */ | 1403 | */ |
| 1404 | static bool ldm_get_vblks (struct block_device *bdev, unsigned long base, | 1404 | static bool ldm_get_vblks(struct parsed_partitions *state, unsigned long base, |
| 1405 | struct ldmdb *ldb) | 1405 | struct ldmdb *ldb) |
| 1406 | { | 1406 | { |
| 1407 | int size, perbuf, skip, finish, s, v, recs; | 1407 | int size, perbuf, skip, finish, s, v, recs; |
| 1408 | u8 *data = NULL; | 1408 | u8 *data = NULL; |
| @@ -1410,7 +1410,7 @@ static bool ldm_get_vblks (struct block_device *bdev, unsigned long base, | |||
| 1410 | bool result = false; | 1410 | bool result = false; |
| 1411 | LIST_HEAD (frags); | 1411 | LIST_HEAD (frags); |
| 1412 | 1412 | ||
| 1413 | BUG_ON (!bdev || !ldb); | 1413 | BUG_ON(!state || !ldb); |
| 1414 | 1414 | ||
| 1415 | size = ldb->vm.vblk_size; | 1415 | size = ldb->vm.vblk_size; |
| 1416 | perbuf = 512 / size; | 1416 | perbuf = 512 / size; |
| @@ -1418,7 +1418,7 @@ static bool ldm_get_vblks (struct block_device *bdev, unsigned long base, | |||
| 1418 | finish = (size * ldb->vm.last_vblk_seq) >> 9; | 1418 | finish = (size * ldb->vm.last_vblk_seq) >> 9; |
| 1419 | 1419 | ||
| 1420 | for (s = skip; s < finish; s++) { /* For each sector */ | 1420 | for (s = skip; s < finish; s++) { /* For each sector */ |
| 1421 | data = read_dev_sector (bdev, base + OFF_VMDB + s, §); | 1421 | data = read_part_sector(state, base + OFF_VMDB + s, §); |
| 1422 | if (!data) { | 1422 | if (!data) { |
| 1423 | ldm_crit ("Disk read failed."); | 1423 | ldm_crit ("Disk read failed."); |
| 1424 | goto out; | 1424 | goto out; |
| @@ -1474,8 +1474,7 @@ static void ldm_free_vblks (struct list_head *lh) | |||
| 1474 | 1474 | ||
| 1475 | /** | 1475 | /** |
| 1476 | * ldm_partition - Find out whether a device is a dynamic disk and handle it | 1476 | * ldm_partition - Find out whether a device is a dynamic disk and handle it |
| 1477 | * @pp: List of the partitions parsed so far | 1477 | * @state: Partition check state including device holding the LDM Database |
| 1478 | * @bdev: Device holding the LDM Database | ||
| 1479 | * | 1478 | * |
| 1480 | * This determines whether the device @bdev is a dynamic disk and if so creates | 1479 | * This determines whether the device @bdev is a dynamic disk and if so creates |
| 1481 | * the partitions necessary in the gendisk structure pointed to by @hd. | 1480 | * the partitions necessary in the gendisk structure pointed to by @hd. |
| @@ -1485,21 +1484,21 @@ static void ldm_free_vblks (struct list_head *lh) | |||
| 1485 | * example, if the device is hda, we would have: hda1: LDM database, hda2, hda3, | 1484 | * example, if the device is hda, we would have: hda1: LDM database, hda2, hda3, |
| 1486 | * and so on: the actual data containing partitions. | 1485 | * and so on: the actual data containing partitions. |
| 1487 | * | 1486 | * |
| 1488 | * Return: 1 Success, @bdev is a dynamic disk and we handled it | 1487 | * Return: 1 Success, @state->bdev is a dynamic disk and we handled it |
| 1489 | * 0 Success, @bdev is not a dynamic disk | 1488 | * 0 Success, @state->bdev is not a dynamic disk |
| 1490 | * -1 An error occurred before enough information had been read | 1489 | * -1 An error occurred before enough information had been read |
| 1491 | * Or @bdev is a dynamic disk, but it may be corrupted | 1490 | * Or @state->bdev is a dynamic disk, but it may be corrupted |
| 1492 | */ | 1491 | */ |
| 1493 | int ldm_partition (struct parsed_partitions *pp, struct block_device *bdev) | 1492 | int ldm_partition(struct parsed_partitions *state) |
| 1494 | { | 1493 | { |
| 1495 | struct ldmdb *ldb; | 1494 | struct ldmdb *ldb; |
| 1496 | unsigned long base; | 1495 | unsigned long base; |
| 1497 | int result = -1; | 1496 | int result = -1; |
| 1498 | 1497 | ||
| 1499 | BUG_ON (!pp || !bdev); | 1498 | BUG_ON(!state); |
| 1500 | 1499 | ||
| 1501 | /* Look for signs of a Dynamic Disk */ | 1500 | /* Look for signs of a Dynamic Disk */ |
| 1502 | if (!ldm_validate_partition_table (bdev)) | 1501 | if (!ldm_validate_partition_table(state)) |
| 1503 | return 0; | 1502 | return 0; |
| 1504 | 1503 | ||
| 1505 | ldb = kmalloc (sizeof (*ldb), GFP_KERNEL); | 1504 | ldb = kmalloc (sizeof (*ldb), GFP_KERNEL); |
| @@ -1509,15 +1508,15 @@ int ldm_partition (struct parsed_partitions *pp, struct block_device *bdev) | |||
| 1509 | } | 1508 | } |
| 1510 | 1509 | ||
| 1511 | /* Parse and check privheads. */ | 1510 | /* Parse and check privheads. */ |
| 1512 | if (!ldm_validate_privheads (bdev, &ldb->ph)) | 1511 | if (!ldm_validate_privheads(state, &ldb->ph)) |
| 1513 | goto out; /* Already logged */ | 1512 | goto out; /* Already logged */ |
| 1514 | 1513 | ||
| 1515 | /* All further references are relative to base (database start). */ | 1514 | /* All further references are relative to base (database start). */ |
| 1516 | base = ldb->ph.config_start; | 1515 | base = ldb->ph.config_start; |
| 1517 | 1516 | ||
| 1518 | /* Parse and check tocs and vmdb. */ | 1517 | /* Parse and check tocs and vmdb. */ |
| 1519 | if (!ldm_validate_tocblocks (bdev, base, ldb) || | 1518 | if (!ldm_validate_tocblocks(state, base, ldb) || |
| 1520 | !ldm_validate_vmdb (bdev, base, ldb)) | 1519 | !ldm_validate_vmdb(state, base, ldb)) |
| 1521 | goto out; /* Already logged */ | 1520 | goto out; /* Already logged */ |
| 1522 | 1521 | ||
| 1523 | /* Initialize vblk lists in ldmdb struct */ | 1522 | /* Initialize vblk lists in ldmdb struct */ |
| @@ -1527,13 +1526,13 @@ int ldm_partition (struct parsed_partitions *pp, struct block_device *bdev) | |||
| 1527 | INIT_LIST_HEAD (&ldb->v_comp); | 1526 | INIT_LIST_HEAD (&ldb->v_comp); |
| 1528 | INIT_LIST_HEAD (&ldb->v_part); | 1527 | INIT_LIST_HEAD (&ldb->v_part); |
| 1529 | 1528 | ||
| 1530 | if (!ldm_get_vblks (bdev, base, ldb)) { | 1529 | if (!ldm_get_vblks(state, base, ldb)) { |
| 1531 | ldm_crit ("Failed to read the VBLKs from the database."); | 1530 | ldm_crit ("Failed to read the VBLKs from the database."); |
| 1532 | goto cleanup; | 1531 | goto cleanup; |
| 1533 | } | 1532 | } |
| 1534 | 1533 | ||
| 1535 | /* Finally, create the data partition devices. */ | 1534 | /* Finally, create the data partition devices. */ |
| 1536 | if (ldm_create_data_partitions (pp, ldb)) { | 1535 | if (ldm_create_data_partitions(state, ldb)) { |
| 1537 | ldm_debug ("Parsed LDM database successfully."); | 1536 | ldm_debug ("Parsed LDM database successfully."); |
| 1538 | result = 1; | 1537 | result = 1; |
| 1539 | } | 1538 | } |
diff --git a/fs/partitions/ldm.h b/fs/partitions/ldm.h index 30e08e809c1d..d1fb50b28d86 100644 --- a/fs/partitions/ldm.h +++ b/fs/partitions/ldm.h | |||
| @@ -209,7 +209,7 @@ struct ldmdb { /* Cache of the database */ | |||
| 209 | struct list_head v_part; | 209 | struct list_head v_part; |
| 210 | }; | 210 | }; |
| 211 | 211 | ||
| 212 | int ldm_partition (struct parsed_partitions *state, struct block_device *bdev); | 212 | int ldm_partition(struct parsed_partitions *state); |
| 213 | 213 | ||
| 214 | #endif /* _FS_PT_LDM_H_ */ | 214 | #endif /* _FS_PT_LDM_H_ */ |
| 215 | 215 | ||
diff --git a/fs/partitions/mac.c b/fs/partitions/mac.c index d4a0fad3563b..13e27b0082f2 100644 --- a/fs/partitions/mac.c +++ b/fs/partitions/mac.c | |||
| @@ -27,7 +27,7 @@ static inline void mac_fix_string(char *stg, int len) | |||
| 27 | stg[i] = 0; | 27 | stg[i] = 0; |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | int mac_partition(struct parsed_partitions *state, struct block_device *bdev) | 30 | int mac_partition(struct parsed_partitions *state) |
| 31 | { | 31 | { |
| 32 | int slot = 1; | 32 | int slot = 1; |
| 33 | Sector sect; | 33 | Sector sect; |
| @@ -42,7 +42,7 @@ int mac_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 42 | struct mac_driver_desc *md; | 42 | struct mac_driver_desc *md; |
| 43 | 43 | ||
| 44 | /* Get 0th block and look at the first partition map entry. */ | 44 | /* Get 0th block and look at the first partition map entry. */ |
| 45 | md = (struct mac_driver_desc *) read_dev_sector(bdev, 0, §); | 45 | md = read_part_sector(state, 0, §); |
| 46 | if (!md) | 46 | if (!md) |
| 47 | return -1; | 47 | return -1; |
| 48 | if (be16_to_cpu(md->signature) != MAC_DRIVER_MAGIC) { | 48 | if (be16_to_cpu(md->signature) != MAC_DRIVER_MAGIC) { |
| @@ -51,7 +51,7 @@ int mac_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 51 | } | 51 | } |
| 52 | secsize = be16_to_cpu(md->block_size); | 52 | secsize = be16_to_cpu(md->block_size); |
| 53 | put_dev_sector(sect); | 53 | put_dev_sector(sect); |
| 54 | data = read_dev_sector(bdev, secsize/512, §); | 54 | data = read_part_sector(state, secsize/512, §); |
| 55 | if (!data) | 55 | if (!data) |
| 56 | return -1; | 56 | return -1; |
| 57 | part = (struct mac_partition *) (data + secsize%512); | 57 | part = (struct mac_partition *) (data + secsize%512); |
| @@ -64,7 +64,7 @@ int mac_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 64 | for (blk = 1; blk <= blocks_in_map; ++blk) { | 64 | for (blk = 1; blk <= blocks_in_map; ++blk) { |
| 65 | int pos = blk * secsize; | 65 | int pos = blk * secsize; |
| 66 | put_dev_sector(sect); | 66 | put_dev_sector(sect); |
| 67 | data = read_dev_sector(bdev, pos/512, §); | 67 | data = read_part_sector(state, pos/512, §); |
| 68 | if (!data) | 68 | if (!data) |
| 69 | return -1; | 69 | return -1; |
| 70 | part = (struct mac_partition *) (data + pos%512); | 70 | part = (struct mac_partition *) (data + pos%512); |
| @@ -123,7 +123,8 @@ int mac_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 123 | } | 123 | } |
| 124 | #ifdef CONFIG_PPC_PMAC | 124 | #ifdef CONFIG_PPC_PMAC |
| 125 | if (found_root_goodness) | 125 | if (found_root_goodness) |
| 126 | note_bootable_part(bdev->bd_dev, found_root, found_root_goodness); | 126 | note_bootable_part(state->bdev->bd_dev, found_root, |
| 127 | found_root_goodness); | ||
| 127 | #endif | 128 | #endif |
| 128 | 129 | ||
| 129 | put_dev_sector(sect); | 130 | put_dev_sector(sect); |
diff --git a/fs/partitions/mac.h b/fs/partitions/mac.h index bbf26e1386fa..3c7d98436380 100644 --- a/fs/partitions/mac.h +++ b/fs/partitions/mac.h | |||
| @@ -41,4 +41,4 @@ struct mac_driver_desc { | |||
| 41 | /* ... more stuff */ | 41 | /* ... more stuff */ |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| 44 | int mac_partition(struct parsed_partitions *state, struct block_device *bdev); | 44 | int mac_partition(struct parsed_partitions *state); |
diff --git a/fs/partitions/msdos.c b/fs/partitions/msdos.c index 90be97f1f5a8..645a68d8c055 100644 --- a/fs/partitions/msdos.c +++ b/fs/partitions/msdos.c | |||
| @@ -64,7 +64,7 @@ msdos_magic_present(unsigned char *p) | |||
| 64 | #define AIX_LABEL_MAGIC2 0xC2 | 64 | #define AIX_LABEL_MAGIC2 0xC2 |
| 65 | #define AIX_LABEL_MAGIC3 0xD4 | 65 | #define AIX_LABEL_MAGIC3 0xD4 |
| 66 | #define AIX_LABEL_MAGIC4 0xC1 | 66 | #define AIX_LABEL_MAGIC4 0xC1 |
| 67 | static int aix_magic_present(unsigned char *p, struct block_device *bdev) | 67 | static int aix_magic_present(struct parsed_partitions *state, unsigned char *p) |
| 68 | { | 68 | { |
| 69 | struct partition *pt = (struct partition *) (p + 0x1be); | 69 | struct partition *pt = (struct partition *) (p + 0x1be); |
| 70 | Sector sect; | 70 | Sector sect; |
| @@ -85,7 +85,7 @@ static int aix_magic_present(unsigned char *p, struct block_device *bdev) | |||
| 85 | is_extended_partition(pt)) | 85 | is_extended_partition(pt)) |
| 86 | return 0; | 86 | return 0; |
| 87 | } | 87 | } |
| 88 | d = read_dev_sector(bdev, 7, §); | 88 | d = read_part_sector(state, 7, §); |
| 89 | if (d) { | 89 | if (d) { |
| 90 | if (d[0] == '_' && d[1] == 'L' && d[2] == 'V' && d[3] == 'M') | 90 | if (d[0] == '_' && d[1] == 'L' && d[2] == 'V' && d[3] == 'M') |
| 91 | ret = 1; | 91 | ret = 1; |
| @@ -105,15 +105,14 @@ static int aix_magic_present(unsigned char *p, struct block_device *bdev) | |||
| 105 | * only for the actual data partitions. | 105 | * only for the actual data partitions. |
| 106 | */ | 106 | */ |
| 107 | 107 | ||
| 108 | static void | 108 | static void parse_extended(struct parsed_partitions *state, |
| 109 | parse_extended(struct parsed_partitions *state, struct block_device *bdev, | 109 | sector_t first_sector, sector_t first_size) |
| 110 | sector_t first_sector, sector_t first_size) | ||
| 111 | { | 110 | { |
| 112 | struct partition *p; | 111 | struct partition *p; |
| 113 | Sector sect; | 112 | Sector sect; |
| 114 | unsigned char *data; | 113 | unsigned char *data; |
| 115 | sector_t this_sector, this_size; | 114 | sector_t this_sector, this_size; |
| 116 | sector_t sector_size = bdev_logical_block_size(bdev) / 512; | 115 | sector_t sector_size = bdev_logical_block_size(state->bdev) / 512; |
| 117 | int loopct = 0; /* number of links followed | 116 | int loopct = 0; /* number of links followed |
| 118 | without finding a data partition */ | 117 | without finding a data partition */ |
| 119 | int i; | 118 | int i; |
| @@ -126,7 +125,7 @@ parse_extended(struct parsed_partitions *state, struct block_device *bdev, | |||
| 126 | return; | 125 | return; |
| 127 | if (state->next == state->limit) | 126 | if (state->next == state->limit) |
| 128 | return; | 127 | return; |
| 129 | data = read_dev_sector(bdev, this_sector, §); | 128 | data = read_part_sector(state, this_sector, §); |
| 130 | if (!data) | 129 | if (!data) |
| 131 | return; | 130 | return; |
| 132 | 131 | ||
| @@ -198,9 +197,8 @@ done: | |||
| 198 | /* james@bpgc.com: Solaris has a nasty indicator: 0x82 which also | 197 | /* james@bpgc.com: Solaris has a nasty indicator: 0x82 which also |
| 199 | indicates linux swap. Be careful before believing this is Solaris. */ | 198 | indicates linux swap. Be careful before believing this is Solaris. */ |
| 200 | 199 | ||
| 201 | static void | 200 | static void parse_solaris_x86(struct parsed_partitions *state, |
| 202 | parse_solaris_x86(struct parsed_partitions *state, struct block_device *bdev, | 201 | sector_t offset, sector_t size, int origin) |
| 203 | sector_t offset, sector_t size, int origin) | ||
| 204 | { | 202 | { |
| 205 | #ifdef CONFIG_SOLARIS_X86_PARTITION | 203 | #ifdef CONFIG_SOLARIS_X86_PARTITION |
| 206 | Sector sect; | 204 | Sector sect; |
| @@ -208,7 +206,7 @@ parse_solaris_x86(struct parsed_partitions *state, struct block_device *bdev, | |||
| 208 | int i; | 206 | int i; |
| 209 | short max_nparts; | 207 | short max_nparts; |
| 210 | 208 | ||
| 211 | v = (struct solaris_x86_vtoc *)read_dev_sector(bdev, offset+1, §); | 209 | v = read_part_sector(state, offset + 1, §); |
| 212 | if (!v) | 210 | if (!v) |
| 213 | return; | 211 | return; |
| 214 | if (le32_to_cpu(v->v_sanity) != SOLARIS_X86_VTOC_SANE) { | 212 | if (le32_to_cpu(v->v_sanity) != SOLARIS_X86_VTOC_SANE) { |
| @@ -245,16 +243,15 @@ parse_solaris_x86(struct parsed_partitions *state, struct block_device *bdev, | |||
| 245 | * Create devices for BSD partitions listed in a disklabel, under a | 243 | * Create devices for BSD partitions listed in a disklabel, under a |
| 246 | * dos-like partition. See parse_extended() for more information. | 244 | * dos-like partition. See parse_extended() for more information. |
| 247 | */ | 245 | */ |
| 248 | static void | 246 | static void parse_bsd(struct parsed_partitions *state, |
| 249 | parse_bsd(struct parsed_partitions *state, struct block_device *bdev, | 247 | sector_t offset, sector_t size, int origin, char *flavour, |
| 250 | sector_t offset, sector_t size, int origin, char *flavour, | 248 | int max_partitions) |
| 251 | int max_partitions) | ||
| 252 | { | 249 | { |
| 253 | Sector sect; | 250 | Sector sect; |
| 254 | struct bsd_disklabel *l; | 251 | struct bsd_disklabel *l; |
| 255 | struct bsd_partition *p; | 252 | struct bsd_partition *p; |
| 256 | 253 | ||
| 257 | l = (struct bsd_disklabel *)read_dev_sector(bdev, offset+1, §); | 254 | l = read_part_sector(state, offset + 1, §); |
| 258 | if (!l) | 255 | if (!l) |
| 259 | return; | 256 | return; |
| 260 | if (le32_to_cpu(l->d_magic) != BSD_DISKMAGIC) { | 257 | if (le32_to_cpu(l->d_magic) != BSD_DISKMAGIC) { |
| @@ -291,33 +288,28 @@ parse_bsd(struct parsed_partitions *state, struct block_device *bdev, | |||
| 291 | } | 288 | } |
| 292 | #endif | 289 | #endif |
| 293 | 290 | ||
| 294 | static void | 291 | static void parse_freebsd(struct parsed_partitions *state, |
| 295 | parse_freebsd(struct parsed_partitions *state, struct block_device *bdev, | 292 | sector_t offset, sector_t size, int origin) |
| 296 | sector_t offset, sector_t size, int origin) | ||
| 297 | { | 293 | { |
| 298 | #ifdef CONFIG_BSD_DISKLABEL | 294 | #ifdef CONFIG_BSD_DISKLABEL |
| 299 | parse_bsd(state, bdev, offset, size, origin, | 295 | parse_bsd(state, offset, size, origin, "bsd", BSD_MAXPARTITIONS); |
| 300 | "bsd", BSD_MAXPARTITIONS); | ||
| 301 | #endif | 296 | #endif |
| 302 | } | 297 | } |
| 303 | 298 | ||
| 304 | static void | 299 | static void parse_netbsd(struct parsed_partitions *state, |
| 305 | parse_netbsd(struct parsed_partitions *state, struct block_device *bdev, | 300 | sector_t offset, sector_t size, int origin) |
| 306 | sector_t offset, sector_t size, int origin) | ||
| 307 | { | 301 | { |
| 308 | #ifdef CONFIG_BSD_DISKLABEL | 302 | #ifdef CONFIG_BSD_DISKLABEL |
| 309 | parse_bsd(state, bdev, offset, size, origin, | 303 | parse_bsd(state, offset, size, origin, "netbsd", BSD_MAXPARTITIONS); |
| 310 | "netbsd", BSD_MAXPARTITIONS); | ||
| 311 | #endif | 304 | #endif |
| 312 | } | 305 | } |
| 313 | 306 | ||
| 314 | static void | 307 | static void parse_openbsd(struct parsed_partitions *state, |
| 315 | parse_openbsd(struct parsed_partitions *state, struct block_device *bdev, | 308 | sector_t offset, sector_t size, int origin) |
| 316 | sector_t offset, sector_t size, int origin) | ||
| 317 | { | 309 | { |
| 318 | #ifdef CONFIG_BSD_DISKLABEL | 310 | #ifdef CONFIG_BSD_DISKLABEL |
| 319 | parse_bsd(state, bdev, offset, size, origin, | 311 | parse_bsd(state, offset, size, origin, "openbsd", |
| 320 | "openbsd", OPENBSD_MAXPARTITIONS); | 312 | OPENBSD_MAXPARTITIONS); |
| 321 | #endif | 313 | #endif |
| 322 | } | 314 | } |
| 323 | 315 | ||
| @@ -325,16 +317,15 @@ parse_openbsd(struct parsed_partitions *state, struct block_device *bdev, | |||
| 325 | * Create devices for Unixware partitions listed in a disklabel, under a | 317 | * Create devices for Unixware partitions listed in a disklabel, under a |
| 326 | * dos-like partition. See parse_extended() for more information. | 318 | * dos-like partition. See parse_extended() for more information. |
| 327 | */ | 319 | */ |
| 328 | static void | 320 | static void parse_unixware(struct parsed_partitions *state, |
| 329 | parse_unixware(struct parsed_partitions *state, struct block_device *bdev, | 321 | sector_t offset, sector_t size, int origin) |
| 330 | sector_t offset, sector_t size, int origin) | ||
| 331 | { | 322 | { |
| 332 | #ifdef CONFIG_UNIXWARE_DISKLABEL | 323 | #ifdef CONFIG_UNIXWARE_DISKLABEL |
| 333 | Sector sect; | 324 | Sector sect; |
| 334 | struct unixware_disklabel *l; | 325 | struct unixware_disklabel *l; |
| 335 | struct unixware_slice *p; | 326 | struct unixware_slice *p; |
| 336 | 327 | ||
| 337 | l = (struct unixware_disklabel *)read_dev_sector(bdev, offset+29, §); | 328 | l = read_part_sector(state, offset + 29, §); |
| 338 | if (!l) | 329 | if (!l) |
| 339 | return; | 330 | return; |
| 340 | if (le32_to_cpu(l->d_magic) != UNIXWARE_DISKMAGIC || | 331 | if (le32_to_cpu(l->d_magic) != UNIXWARE_DISKMAGIC || |
| @@ -365,9 +356,8 @@ parse_unixware(struct parsed_partitions *state, struct block_device *bdev, | |||
| 365 | * Anand Krishnamurthy <anandk@wiproge.med.ge.com> | 356 | * Anand Krishnamurthy <anandk@wiproge.med.ge.com> |
| 366 | * Rajeev V. Pillai <rajeevvp@yahoo.com> | 357 | * Rajeev V. Pillai <rajeevvp@yahoo.com> |
| 367 | */ | 358 | */ |
| 368 | static void | 359 | static void parse_minix(struct parsed_partitions *state, |
| 369 | parse_minix(struct parsed_partitions *state, struct block_device *bdev, | 360 | sector_t offset, sector_t size, int origin) |
| 370 | sector_t offset, sector_t size, int origin) | ||
| 371 | { | 361 | { |
| 372 | #ifdef CONFIG_MINIX_SUBPARTITION | 362 | #ifdef CONFIG_MINIX_SUBPARTITION |
| 373 | Sector sect; | 363 | Sector sect; |
| @@ -375,7 +365,7 @@ parse_minix(struct parsed_partitions *state, struct block_device *bdev, | |||
| 375 | struct partition *p; | 365 | struct partition *p; |
| 376 | int i; | 366 | int i; |
| 377 | 367 | ||
| 378 | data = read_dev_sector(bdev, offset, §); | 368 | data = read_part_sector(state, offset, §); |
| 379 | if (!data) | 369 | if (!data) |
| 380 | return; | 370 | return; |
| 381 | 371 | ||
| @@ -404,8 +394,7 @@ parse_minix(struct parsed_partitions *state, struct block_device *bdev, | |||
| 404 | 394 | ||
| 405 | static struct { | 395 | static struct { |
| 406 | unsigned char id; | 396 | unsigned char id; |
| 407 | void (*parse)(struct parsed_partitions *, struct block_device *, | 397 | void (*parse)(struct parsed_partitions *, sector_t, sector_t, int); |
| 408 | sector_t, sector_t, int); | ||
| 409 | } subtypes[] = { | 398 | } subtypes[] = { |
| 410 | {FREEBSD_PARTITION, parse_freebsd}, | 399 | {FREEBSD_PARTITION, parse_freebsd}, |
| 411 | {NETBSD_PARTITION, parse_netbsd}, | 400 | {NETBSD_PARTITION, parse_netbsd}, |
| @@ -417,16 +406,16 @@ static struct { | |||
| 417 | {0, NULL}, | 406 | {0, NULL}, |
| 418 | }; | 407 | }; |
| 419 | 408 | ||
| 420 | int msdos_partition(struct parsed_partitions *state, struct block_device *bdev) | 409 | int msdos_partition(struct parsed_partitions *state) |
| 421 | { | 410 | { |
| 422 | sector_t sector_size = bdev_logical_block_size(bdev) / 512; | 411 | sector_t sector_size = bdev_logical_block_size(state->bdev) / 512; |
| 423 | Sector sect; | 412 | Sector sect; |
| 424 | unsigned char *data; | 413 | unsigned char *data; |
| 425 | struct partition *p; | 414 | struct partition *p; |
| 426 | struct fat_boot_sector *fb; | 415 | struct fat_boot_sector *fb; |
| 427 | int slot; | 416 | int slot; |
| 428 | 417 | ||
| 429 | data = read_dev_sector(bdev, 0, §); | 418 | data = read_part_sector(state, 0, §); |
| 430 | if (!data) | 419 | if (!data) |
| 431 | return -1; | 420 | return -1; |
| 432 | if (!msdos_magic_present(data + 510)) { | 421 | if (!msdos_magic_present(data + 510)) { |
| @@ -434,7 +423,7 @@ int msdos_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 434 | return 0; | 423 | return 0; |
| 435 | } | 424 | } |
| 436 | 425 | ||
| 437 | if (aix_magic_present(data, bdev)) { | 426 | if (aix_magic_present(state, data)) { |
| 438 | put_dev_sector(sect); | 427 | put_dev_sector(sect); |
| 439 | printk( " [AIX]"); | 428 | printk( " [AIX]"); |
| 440 | return 0; | 429 | return 0; |
| @@ -503,7 +492,7 @@ int msdos_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 503 | put_partition(state, slot, start, n); | 492 | put_partition(state, slot, start, n); |
| 504 | 493 | ||
| 505 | printk(" <"); | 494 | printk(" <"); |
| 506 | parse_extended(state, bdev, start, size); | 495 | parse_extended(state, start, size); |
| 507 | printk(" >"); | 496 | printk(" >"); |
| 508 | continue; | 497 | continue; |
| 509 | } | 498 | } |
| @@ -532,8 +521,8 @@ int msdos_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 532 | 521 | ||
| 533 | if (!subtypes[n].parse) | 522 | if (!subtypes[n].parse) |
| 534 | continue; | 523 | continue; |
| 535 | subtypes[n].parse(state, bdev, start_sect(p)*sector_size, | 524 | subtypes[n].parse(state, start_sect(p) * sector_size, |
| 536 | nr_sects(p)*sector_size, slot); | 525 | nr_sects(p) * sector_size, slot); |
| 537 | } | 526 | } |
| 538 | put_dev_sector(sect); | 527 | put_dev_sector(sect); |
| 539 | return 1; | 528 | return 1; |
diff --git a/fs/partitions/msdos.h b/fs/partitions/msdos.h index 01e5e0b6902d..38c781c490b3 100644 --- a/fs/partitions/msdos.h +++ b/fs/partitions/msdos.h | |||
| @@ -4,5 +4,5 @@ | |||
| 4 | 4 | ||
| 5 | #define MSDOS_LABEL_MAGIC 0xAA55 | 5 | #define MSDOS_LABEL_MAGIC 0xAA55 |
| 6 | 6 | ||
| 7 | int msdos_partition(struct parsed_partitions *state, struct block_device *bdev); | 7 | int msdos_partition(struct parsed_partitions *state); |
| 8 | 8 | ||
diff --git a/fs/partitions/osf.c b/fs/partitions/osf.c index c05c17bc5df3..fc22b85d436a 100644 --- a/fs/partitions/osf.c +++ b/fs/partitions/osf.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | #include "check.h" | 10 | #include "check.h" |
| 11 | #include "osf.h" | 11 | #include "osf.h" |
| 12 | 12 | ||
| 13 | int osf_partition(struct parsed_partitions *state, struct block_device *bdev) | 13 | int osf_partition(struct parsed_partitions *state) |
| 14 | { | 14 | { |
| 15 | int i; | 15 | int i; |
| 16 | int slot = 1; | 16 | int slot = 1; |
| @@ -49,7 +49,7 @@ int osf_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 49 | } * label; | 49 | } * label; |
| 50 | struct d_partition * partition; | 50 | struct d_partition * partition; |
| 51 | 51 | ||
| 52 | data = read_dev_sector(bdev, 0, §); | 52 | data = read_part_sector(state, 0, §); |
| 53 | if (!data) | 53 | if (!data) |
| 54 | return -1; | 54 | return -1; |
| 55 | 55 | ||
diff --git a/fs/partitions/osf.h b/fs/partitions/osf.h index 427b8eab314b..20ed2315ec16 100644 --- a/fs/partitions/osf.h +++ b/fs/partitions/osf.h | |||
| @@ -4,4 +4,4 @@ | |||
| 4 | 4 | ||
| 5 | #define DISKLABELMAGIC (0x82564557UL) | 5 | #define DISKLABELMAGIC (0x82564557UL) |
| 6 | 6 | ||
| 7 | int osf_partition(struct parsed_partitions *state, struct block_device *bdev); | 7 | int osf_partition(struct parsed_partitions *state); |
diff --git a/fs/partitions/sgi.c b/fs/partitions/sgi.c index ed5ac83fe83a..43b1df9aa16c 100644 --- a/fs/partitions/sgi.c +++ b/fs/partitions/sgi.c | |||
| @@ -27,7 +27,7 @@ struct sgi_disklabel { | |||
| 27 | __be32 _unused1; /* Padding */ | 27 | __be32 _unused1; /* Padding */ |
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | int sgi_partition(struct parsed_partitions *state, struct block_device *bdev) | 30 | int sgi_partition(struct parsed_partitions *state) |
| 31 | { | 31 | { |
| 32 | int i, csum; | 32 | int i, csum; |
| 33 | __be32 magic; | 33 | __be32 magic; |
| @@ -39,7 +39,7 @@ int sgi_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 39 | struct sgi_partition *p; | 39 | struct sgi_partition *p; |
| 40 | char b[BDEVNAME_SIZE]; | 40 | char b[BDEVNAME_SIZE]; |
| 41 | 41 | ||
| 42 | label = (struct sgi_disklabel *) read_dev_sector(bdev, 0, §); | 42 | label = read_part_sector(state, 0, §); |
| 43 | if (!label) | 43 | if (!label) |
| 44 | return -1; | 44 | return -1; |
| 45 | p = &label->partitions[0]; | 45 | p = &label->partitions[0]; |
| @@ -57,7 +57,7 @@ int sgi_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 57 | } | 57 | } |
| 58 | if(csum) { | 58 | if(csum) { |
| 59 | printk(KERN_WARNING "Dev %s SGI disklabel: csum bad, label corrupted\n", | 59 | printk(KERN_WARNING "Dev %s SGI disklabel: csum bad, label corrupted\n", |
| 60 | bdevname(bdev, b)); | 60 | bdevname(state->bdev, b)); |
| 61 | put_dev_sector(sect); | 61 | put_dev_sector(sect); |
| 62 | return 0; | 62 | return 0; |
| 63 | } | 63 | } |
diff --git a/fs/partitions/sgi.h b/fs/partitions/sgi.h index 5d5595c09928..b9553ebdd5a9 100644 --- a/fs/partitions/sgi.h +++ b/fs/partitions/sgi.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * fs/partitions/sgi.h | 2 | * fs/partitions/sgi.h |
| 3 | */ | 3 | */ |
| 4 | 4 | ||
| 5 | extern int sgi_partition(struct parsed_partitions *state, struct block_device *bdev); | 5 | extern int sgi_partition(struct parsed_partitions *state); |
| 6 | 6 | ||
| 7 | #define SGI_LABEL_MAGIC 0x0be5a941 | 7 | #define SGI_LABEL_MAGIC 0x0be5a941 |
| 8 | 8 | ||
diff --git a/fs/partitions/sun.c b/fs/partitions/sun.c index c95e6a62c01d..a32660e25f7f 100644 --- a/fs/partitions/sun.c +++ b/fs/partitions/sun.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | #include "check.h" | 10 | #include "check.h" |
| 11 | #include "sun.h" | 11 | #include "sun.h" |
| 12 | 12 | ||
| 13 | int sun_partition(struct parsed_partitions *state, struct block_device *bdev) | 13 | int sun_partition(struct parsed_partitions *state) |
| 14 | { | 14 | { |
| 15 | int i; | 15 | int i; |
| 16 | __be16 csum; | 16 | __be16 csum; |
| @@ -61,7 +61,7 @@ int sun_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 61 | int use_vtoc; | 61 | int use_vtoc; |
| 62 | int nparts; | 62 | int nparts; |
| 63 | 63 | ||
| 64 | label = (struct sun_disklabel *)read_dev_sector(bdev, 0, §); | 64 | label = read_part_sector(state, 0, §); |
| 65 | if (!label) | 65 | if (!label) |
| 66 | return -1; | 66 | return -1; |
| 67 | 67 | ||
| @@ -78,7 +78,7 @@ int sun_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 78 | csum ^= *ush--; | 78 | csum ^= *ush--; |
| 79 | if (csum) { | 79 | if (csum) { |
| 80 | printk("Dev %s Sun disklabel: Csum bad, label corrupted\n", | 80 | printk("Dev %s Sun disklabel: Csum bad, label corrupted\n", |
| 81 | bdevname(bdev, b)); | 81 | bdevname(state->bdev, b)); |
| 82 | put_dev_sector(sect); | 82 | put_dev_sector(sect); |
| 83 | return 0; | 83 | return 0; |
| 84 | } | 84 | } |
diff --git a/fs/partitions/sun.h b/fs/partitions/sun.h index 7f864d1f86d4..2424baa8319f 100644 --- a/fs/partitions/sun.h +++ b/fs/partitions/sun.h | |||
| @@ -5,4 +5,4 @@ | |||
| 5 | #define SUN_LABEL_MAGIC 0xDABE | 5 | #define SUN_LABEL_MAGIC 0xDABE |
| 6 | #define SUN_VTOC_SANITY 0x600DDEEE | 6 | #define SUN_VTOC_SANITY 0x600DDEEE |
| 7 | 7 | ||
| 8 | int sun_partition(struct parsed_partitions *state, struct block_device *bdev); | 8 | int sun_partition(struct parsed_partitions *state); |
diff --git a/fs/partitions/sysv68.c b/fs/partitions/sysv68.c index 4eba27b78643..9030c864428e 100644 --- a/fs/partitions/sysv68.c +++ b/fs/partitions/sysv68.c | |||
| @@ -46,7 +46,7 @@ struct slice { | |||
| 46 | }; | 46 | }; |
| 47 | 47 | ||
| 48 | 48 | ||
| 49 | int sysv68_partition(struct parsed_partitions *state, struct block_device *bdev) | 49 | int sysv68_partition(struct parsed_partitions *state) |
| 50 | { | 50 | { |
| 51 | int i, slices; | 51 | int i, slices; |
| 52 | int slot = 1; | 52 | int slot = 1; |
| @@ -55,7 +55,7 @@ int sysv68_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 55 | struct dkblk0 *b; | 55 | struct dkblk0 *b; |
| 56 | struct slice *slice; | 56 | struct slice *slice; |
| 57 | 57 | ||
| 58 | data = read_dev_sector(bdev, 0, §); | 58 | data = read_part_sector(state, 0, §); |
| 59 | if (!data) | 59 | if (!data) |
| 60 | return -1; | 60 | return -1; |
| 61 | 61 | ||
| @@ -68,7 +68,7 @@ int sysv68_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 68 | i = be32_to_cpu(b->dk_ios.ios_slcblk); | 68 | i = be32_to_cpu(b->dk_ios.ios_slcblk); |
| 69 | put_dev_sector(sect); | 69 | put_dev_sector(sect); |
| 70 | 70 | ||
| 71 | data = read_dev_sector(bdev, i, §); | 71 | data = read_part_sector(state, i, §); |
| 72 | if (!data) | 72 | if (!data) |
| 73 | return -1; | 73 | return -1; |
| 74 | 74 | ||
diff --git a/fs/partitions/sysv68.h b/fs/partitions/sysv68.h index fa733f68431b..bf2f5ffa97ac 100644 --- a/fs/partitions/sysv68.h +++ b/fs/partitions/sysv68.h | |||
| @@ -1 +1 @@ | |||
| extern int sysv68_partition(struct parsed_partitions *state, struct block_device *bdev); | extern int sysv68_partition(struct parsed_partitions *state); | ||
diff --git a/fs/partitions/ultrix.c b/fs/partitions/ultrix.c index ec852c11dce4..db9eef260364 100644 --- a/fs/partitions/ultrix.c +++ b/fs/partitions/ultrix.c | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | #include "check.h" | 9 | #include "check.h" |
| 10 | #include "ultrix.h" | 10 | #include "ultrix.h" |
| 11 | 11 | ||
| 12 | int ultrix_partition(struct parsed_partitions *state, struct block_device *bdev) | 12 | int ultrix_partition(struct parsed_partitions *state) |
| 13 | { | 13 | { |
| 14 | int i; | 14 | int i; |
| 15 | Sector sect; | 15 | Sector sect; |
| @@ -26,7 +26,7 @@ int ultrix_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 26 | #define PT_MAGIC 0x032957 /* Partition magic number */ | 26 | #define PT_MAGIC 0x032957 /* Partition magic number */ |
| 27 | #define PT_VALID 1 /* Indicates if struct is valid */ | 27 | #define PT_VALID 1 /* Indicates if struct is valid */ |
| 28 | 28 | ||
| 29 | data = read_dev_sector(bdev, (16384 - sizeof(*label))/512, §); | 29 | data = read_part_sector(state, (16384 - sizeof(*label))/512, §); |
| 30 | if (!data) | 30 | if (!data) |
| 31 | return -1; | 31 | return -1; |
| 32 | 32 | ||
diff --git a/fs/partitions/ultrix.h b/fs/partitions/ultrix.h index a74bf8e2d370..a3cc00b2bded 100644 --- a/fs/partitions/ultrix.h +++ b/fs/partitions/ultrix.h | |||
| @@ -2,4 +2,4 @@ | |||
| 2 | * fs/partitions/ultrix.h | 2 | * fs/partitions/ultrix.h |
| 3 | */ | 3 | */ |
| 4 | 4 | ||
| 5 | int ultrix_partition(struct parsed_partitions *state, struct block_device *bdev); | 5 | int ultrix_partition(struct parsed_partitions *state); |
