From: Anton Blanchard <hidden> Date: 2006-12-06 21:16:30
Hi,
The patch to identify AIX disks and ignore them has caused at least one
machine to fail to find the root partition on 2.6.19. The patch is:
http://lkml.org/lkml/2006/7/31/117
The problem is some disk formatters do not blow away the first 4 bytes
of the disk. If the disk we are installing to used to have AIX on it,
then the first 4 bytes will still have IBMA in EBCDIC.
The install in question was debian etch. Im not sure what the best fix
is, perhaps the AIX detection code could check more than the first 4
bytes.
Anton
From: David Gibson <hidden> Date: 2006-12-06 22:22:13
On Thu, Dec 07, 2006 at 08:16:30AM +1100, Anton Blanchard wrote:
Hi,
The patch to identify AIX disks and ignore them has caused at least one
machine to fail to find the root partition on 2.6.19. The patch is:
http://lkml.org/lkml/2006/7/31/117
The problem is some disk formatters do not blow away the first 4 bytes
of the disk. If the disk we are installing to used to have AIX on it,
then the first 4 bytes will still have IBMA in EBCDIC.
The install in question was debian etch. Im not sure what the best fix
is, perhaps the AIX detection code could check more than the first 4
bytes.
Yeah, I had this problem on paulus' old PReP machine - I had to
manually zap the AIX magic number to get it to see the perfectly good
partitions.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
From: Olaf Hering <hidden> Date: 2007-01-04 08:42:00
On Thu, Dec 07, David Gibson wrote:
On Thu, Dec 07, 2006 at 08:16:30AM +1100, Anton Blanchard wrote:
quoted
The patch to identify AIX disks and ignore them has caused at least one
machine to fail to find the root partition on 2.6.19. The patch is:
http://lkml.org/lkml/2006/7/31/117
The problem is some disk formatters do not blow away the first 4 bytes
of the disk. If the disk we are installing to used to have AIX on it,
then the first 4 bytes will still have IBMA in EBCDIC.
The install in question was debian etch. Im not sure what the best fix
is, perhaps the AIX detection code could check more than the first 4
bytes.
Yeah, I had this problem on paulus' old PReP machine - I had to
manually zap the AIX magic number to get it to see the perfectly good
partitions.
What pre-historic fdisk was used to create the partition table? At least
the current version of fdisk does not let me manipulate the existing
partition table before I remove the AIX marker. The patch below should
fix it. Partition table entries 2,3,4 from an AIX 4.3 install have type 0x41.
Also, the whole partition info for primary partitions is in this block:
dd if=/dev/sdb count=$(( 4 * 16 )) bs=1 skip=$(( 0x1be ))
All other data do not matter, beside the 0x55aa marker at the end of the
first block.
Signed-off-by: Olaf Hering <redacted>
---
fs/partitions/msdos.c | 12 +++++++++++-
include/linux/genhd.h | 2 ++
2 files changed, 13 insertions(+), 1 deletion(-)
Index: linux-2.6/fs/partitions/msdos.c
===================================================================
@@ -63,15 +63,25 @@ msdos_magic_present(unsigned char *p)#define AIX_LABEL_MAGIC4 0xC1staticintaix_magic_present(unsignedchar*p,structblock_device*bdev){+structpartition*pt=(structpartition*)(p+0x1be);Sectorsect;unsignedchar*d;-intret=0;+intslot,ret=0;if(p[0]!=AIX_LABEL_MAGIC1&&p[1]!=AIX_LABEL_MAGIC2&&p[2]!=AIX_LABEL_MAGIC3&&p[3]!=AIX_LABEL_MAGIC4)return0;+/* Assume the partition table is valid if Linux partitions exists */+for(slot=1;slot<=4;slot++,pt++){+if(pt->sys_ind==LINUX_SWAP_PARTITION||+pt->sys_ind==LINUX_RAID_PARTITION||+pt->sys_ind==LINUX_DATA_PARTITION||+pt->sys_ind==LINUX_LVM_PARTITION||+is_extended_partition(pt))+return0;+}d=read_dev_sector(bdev,7,§);if(d){if(d[0]=='_'&&d[1]=='L'&&d[2]=='V'&&d[3]=='M')
@@ -68,10 +68,10 @@ static int aix_magic_present(unsigned chunsignedchar*d;intslot,ret=0;-if(p[0]!=AIX_LABEL_MAGIC1&&-p[1]!=AIX_LABEL_MAGIC2&&-p[2]!=AIX_LABEL_MAGIC3&&-p[3]!=AIX_LABEL_MAGIC4)+if(!(p[0]==AIX_LABEL_MAGIC1&&+p[1]==AIX_LABEL_MAGIC2&&+p[2]==AIX_LABEL_MAGIC3&&+p[3]==AIX_LABEL_MAGIC4))return0;/* Assume the partition table is valid if Linux partitions exists */for(slot=1;slot<=4;slot++,pt++){