linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Olaf Hering <olh@suse.de>
To: Anton Blanchard <anton@samba.org>,
	linuxppc-dev@ozlabs.org, Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH] relax check for AIX in msdos partition table
Date: Thu, 4 Jan 2007 09:40:49 +0100	[thread overview]
Message-ID: <20070104084049.GA19959@suse.de> (raw)
In-Reply-To: <20061206222213.GA17446@localhost.localdomain>

On Thu, Dec 07, David Gibson wrote:

> On Thu, Dec 07, 2006 at 08:16:30AM +1100, Anton Blanchard wrote:

> > 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 <olh@suse.de>

---
 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
===================================================================
--- linux-2.6.orig/fs/partitions/msdos.c
+++ linux-2.6/fs/partitions/msdos.c
@@ -63,15 +63,25 @@ msdos_magic_present(unsigned char *p)
 #define AIX_LABEL_MAGIC4	0xC1
 static int aix_magic_present(unsigned char *p, struct block_device *bdev)
 {
+	struct partition *pt = (struct partition *) (p + 0x1be);
 	Sector sect;
 	unsigned char *d;
-	int ret = 0;
+	int slot, ret = 0;
 
 	if (p[0] != AIX_LABEL_MAGIC1 &&
 		p[1] != AIX_LABEL_MAGIC2 &&
 		p[2] != AIX_LABEL_MAGIC3 &&
 		p[3] != AIX_LABEL_MAGIC4)
 		return 0;
+	/* 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))
+			return 0;
+	}
 	d = read_dev_sector(bdev, 7, &sect);
 	if (d) {
 		if (d[0] == '_' && d[1] == 'L' && d[2] == 'V' && d[3] == 'M')
Index: linux-2.6/include/linux/genhd.h
===================================================================
--- linux-2.6.orig/include/linux/genhd.h
+++ linux-2.6/include/linux/genhd.h
@@ -21,6 +21,8 @@ enum {
 	WIN98_EXTENDED_PARTITION = 0x0f,
 
 	LINUX_SWAP_PARTITION = 0x82,
+	LINUX_DATA_PARTITION = 0x83,
+	LINUX_LVM_PARTITION = 0x8e,
 	LINUX_RAID_PARTITION = 0xfd,	/* autodetect RAID partition */
 
 	SOLARIS_X86_PARTITION =	LINUX_SWAP_PARTITION,

  parent reply	other threads:[~2007-01-04  8:42 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-06 21:16 2.6.19 cannot find root partition Anton Blanchard
2006-12-06 21:24 ` Olaf Hering
2006-12-06 22:22 ` David Gibson
2006-12-07  8:17   ` Olaf Hering
2007-01-04  8:40   ` Olaf Hering [this message]
2007-01-04 13:20     ` [PATCH] fix logic error in AIX detection Olaf Hering

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070104084049.GA19959@suse.de \
    --to=olh@suse.de \
    --cc=akpm@osdl.org \
    --cc=anton@samba.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).