diff options
Diffstat (limited to 'fs/partitions')
-rw-r--r-- | fs/partitions/msdos.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/fs/partitions/msdos.c b/fs/partitions/msdos.c index 8f12587c3129..4f8df71e49d3 100644 --- a/fs/partitions/msdos.c +++ b/fs/partitions/msdos.c | |||
@@ -58,6 +58,31 @@ msdos_magic_present(unsigned char *p) | |||
58 | return (p[0] == MSDOS_LABEL_MAGIC1 && p[1] == MSDOS_LABEL_MAGIC2); | 58 | return (p[0] == MSDOS_LABEL_MAGIC1 && p[1] == MSDOS_LABEL_MAGIC2); |
59 | } | 59 | } |
60 | 60 | ||
61 | /* Value is EBCDIC 'IBMA' */ | ||
62 | #define AIX_LABEL_MAGIC1 0xC9 | ||
63 | #define AIX_LABEL_MAGIC2 0xC2 | ||
64 | #define AIX_LABEL_MAGIC3 0xD4 | ||
65 | #define AIX_LABEL_MAGIC4 0xC1 | ||
66 | static int aix_magic_present(unsigned char *p, struct block_device *bdev) | ||
67 | { | ||
68 | Sector sect; | ||
69 | unsigned char *d; | ||
70 | int ret = 0; | ||
71 | |||
72 | if (p[0] != AIX_LABEL_MAGIC1 && | ||
73 | p[1] != AIX_LABEL_MAGIC2 && | ||
74 | p[2] != AIX_LABEL_MAGIC3 && | ||
75 | p[3] != AIX_LABEL_MAGIC4) | ||
76 | return 0; | ||
77 | d = read_dev_sector(bdev, 7, §); | ||
78 | if (d) { | ||
79 | if (d[0] == '_' && d[1] == 'L' && d[2] == 'V' && d[3] == 'M') | ||
80 | ret = 1; | ||
81 | put_dev_sector(sect); | ||
82 | }; | ||
83 | return ret; | ||
84 | } | ||
85 | |||
61 | /* | 86 | /* |
62 | * Create devices for each logical partition in an extended partition. | 87 | * Create devices for each logical partition in an extended partition. |
63 | * The logical partitions form a linked list, with each entry being | 88 | * The logical partitions form a linked list, with each entry being |
@@ -393,6 +418,12 @@ int msdos_partition(struct parsed_partitions *state, struct block_device *bdev) | |||
393 | return 0; | 418 | return 0; |
394 | } | 419 | } |
395 | 420 | ||
421 | if (aix_magic_present(data, bdev)) { | ||
422 | put_dev_sector(sect); | ||
423 | printk( " [AIX]"); | ||
424 | return 0; | ||
425 | } | ||
426 | |||
396 | /* | 427 | /* |
397 | * Now that the 55aa signature is present, this is probably | 428 | * Now that the 55aa signature is present, this is probably |
398 | * either the boot sector of a FAT filesystem or a DOS-type | 429 | * either the boot sector of a FAT filesystem or a DOS-type |