diff options
| -rw-r--r-- | fs/partitions/msdos.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/fs/partitions/msdos.c b/fs/partitions/msdos.c index 5567ec0d03a3..796511886f28 100644 --- a/fs/partitions/msdos.c +++ b/fs/partitions/msdos.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | * | 18 | * |
| 19 | * Re-organised Feb 1998 Russell King | 19 | * Re-organised Feb 1998 Russell King |
| 20 | */ | 20 | */ |
| 21 | 21 | #include <linux/msdos_fs.h> | |
| 22 | 22 | ||
| 23 | #include "check.h" | 23 | #include "check.h" |
| 24 | #include "msdos.h" | 24 | #include "msdos.h" |
| @@ -419,6 +419,7 @@ int msdos_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 419 | Sector sect; | 419 | Sector sect; |
| 420 | unsigned char *data; | 420 | unsigned char *data; |
| 421 | struct partition *p; | 421 | struct partition *p; |
| 422 | struct fat_boot_sector *fb; | ||
| 422 | int slot; | 423 | int slot; |
| 423 | 424 | ||
| 424 | data = read_dev_sector(bdev, 0, §); | 425 | data = read_dev_sector(bdev, 0, §); |
| @@ -444,8 +445,21 @@ int msdos_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
| 444 | p = (struct partition *) (data + 0x1be); | 445 | p = (struct partition *) (data + 0x1be); |
| 445 | for (slot = 1; slot <= 4; slot++, p++) { | 446 | for (slot = 1; slot <= 4; slot++, p++) { |
| 446 | if (p->boot_ind != 0 && p->boot_ind != 0x80) { | 447 | if (p->boot_ind != 0 && p->boot_ind != 0x80) { |
| 447 | put_dev_sector(sect); | 448 | /* |
| 448 | return 0; | 449 | * Even without a valid boot inidicator value |
| 450 | * its still possible this is valid FAT filesystem | ||
| 451 | * without a partition table. | ||
| 452 | */ | ||
| 453 | fb = (struct fat_boot_sector *) data; | ||
| 454 | if (slot == 1 && fb->reserved && fb->fats | ||
| 455 | && fat_valid_media(fb->media)) { | ||
| 456 | printk("\n"); | ||
| 457 | put_dev_sector(sect); | ||
| 458 | return 1; | ||
| 459 | } else { | ||
| 460 | put_dev_sector(sect); | ||
| 461 | return 0; | ||
| 462 | } | ||
| 449 | } | 463 | } |
| 450 | } | 464 | } |
| 451 | 465 | ||
