public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch] IDE OnTrack remap for 2.5.58
@ 2003-01-16 18:14 Jim Houston
  2003-01-16 18:28 ` Andre Hedrick
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Jim Houston @ 2003-01-16 18:14 UTC (permalink / raw)
  To: linux-kernel


Hi Everyone,

I'm running a Seagate 80 GB disk in an old Pentium Pro dual processor.
I installed the current Redhat (phoebe) beta, and it works fine until
I try to boot a 2.5.58 kernel.  It fails to mount the root disk because
the disk has been setup with OnTrack remaping.  I didn't do anything
to ask for this remapping.  Perhaps Seagate is shipping with this pre-
installed?

I went back and looked through the patches and found that the remapping
support was removed in patch-2.5.30.  The comments in the mailing list
suggest that it belonged in user space.  I have not found code/instructions
on how to do this.  Since then, most of IDE code has been reverted to the
2.4 versions but not this bit.

The attached patch is just the bit of code which was removed in 2.5.30
with the obvious changes needed to make it work in a 2.5.58 kernel.
I have a dream of upgrading my test machine to something clean and modern
unpolluted by backwards compatible cruft.  Until then, this bit of code
doesn't seem too bad.

Jim Houston - Concurrent Computer Corp.


--- linux-2.5.58.orig/fs/partitions/msdos.c	Thu Jan 16 11:56:13 2003
+++ linux-2.5.58/fs/partitions/msdos.c	Wed Jan 15 17:32:22 2003
@@ -385,6 +385,87 @@
 	{SOLARIS_X86_PARTITION, parse_solaris_x86},
 	{0, NULL},
 };
+/*
+ * Look for various forms of IDE disk geometry translation
+ */
+static int handle_ide_mess(struct block_device *bdev)
+{
+#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
+	Sector sect;
+	unsigned char *data;
+	kdev_t dev = to_kdev_t(bdev->bd_dev);
+	unsigned int sig;
+	int heads = 0;
+	struct partition *p;
+	int i;
+#ifdef CONFIG_BLK_DEV_IDE_MODULE
+	if (!ide_xlate_1024)
+		return 1;
+#endif
+	/*
+	 * The i386 partition handling programs very often
+	 * make partitions end on cylinder boundaries.
+	 * There is no need to do so, and Linux fdisk doesn't always
+	 * do this, and Windows NT on Alpha doesn't do this either,
+	 * but still, this helps to guess #heads.
+	 */
+	data = read_dev_sector(bdev, 0, &sect);
+	if (!data)
+		return -1;
+	if (!msdos_magic_present(data + 510)) {
+		put_dev_sector(sect);
+		return 0;
+	}
+	sig = le16_to_cpu(*(unsigned short *)(data + 2));
+	p = (struct partition *) (data + 0x1be);
+	for (i = 0; i < 4; i++) {
+		struct partition *q = &p[i];
+		if (NR_SECTS(q)) {
+			if ((q->sector & 63) == 1 &&
+			    (q->end_sector & 63) == 63)
+				heads = q->end_head + 1;
+			break;
+		}
+	}
+	if (SYS_IND(p) == EZD_PARTITION) {
+		/*
+		 * Accesses to sector 0 must go to sector 1 instead.
+		 */
+		if (ide_xlate_1024(bdev, -1, heads, " [EZD]"))
+			goto reread;
+	} else if (SYS_IND(p) == DM6_PARTITION) {
+
+		/*
+		 * Everything on the disk is offset by 63 sectors,
+		 * including a "new" MBR with its own partition table.
+		 */
+		if (ide_xlate_1024(bdev, 1, heads, " [DM6:DDO]"))
+			goto reread;
+	} else if (sig <= 0x1ae &&
+		   data[sig] == 0xAA && data[sig+1] == 0x55 &&
+		   (data[sig+2] & 1)) {
+		/* DM6 signature in MBR, courtesy of OnTrack */
+		(void) ide_xlate_1024 (bdev, 0, heads, " [DM6:MBR]");
+	} else if (SYS_IND(p) == DM6_AUX1PARTITION ||
+		   SYS_IND(p) == DM6_AUX3PARTITION) {
+		/*
+		 * DM6 on other than the first (boot) drive
+		 */
+		(void) ide_xlate_1024(bdev, 0, heads, " [DM6:AUX]");
+	} else {
+		(void) ide_xlate_1024(bdev, 2, heads, " [PTBL]");
+	}
+	put_dev_sector(sect);
+	return 1;
+
+reread:
+	put_dev_sector(sect);
+	/* Flush the cache */
+	invalidate_bdev(bdev, 1);
+	truncate_inode_pages(bdev->bd_inode->i_mapping, 0);
+#endif /* defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) */
+	return 1;
+}
  
 int msdos_partition(struct parsed_partitions *state, struct block_device *bdev)
 {
@@ -393,7 +474,11 @@
 	unsigned char *data;
 	struct partition *p;
 	int slot;
+	int err;
 
+	err = handle_ide_mess(bdev);
+	if (err <= 0)
+		return err;
 	data = read_dev_sector(bdev, 0, &sect);
 	if (!data)
 		return -1;
@@ -439,6 +524,21 @@
 			state->parts[slot].flags = 1;
 	}
 
+	/*
+	 *  Check for old-style Disk Manager partition table
+	 */
+	if (msdos_magic_present(data + 0xfc)) {
+		p = (struct partition *) (0x1be + data);
+		for (slot = 4 ; slot < 16 ; slot++, state->next++) {
+			p--;
+			if (state->next == state->limit)
+				break;
+			if (!(START_SECT(p) && NR_SECTS(p)))
+				continue;
+			put_partition(state, state->next,
+						START_SECT(p), NR_SECTS(p));
+		}
+	}
 	printk("\n");
 
 	/* second pass - output for each on a separate line */
@@ -456,7 +556,7 @@
 		if (!subtypes[n].parse)
 			continue;
 		subtypes[n].parse(state, bdev, START_SECT(p)*sector_size,
-						NR_SECTS(p)*sector_size, slot);
+						NR_SECTS(p)*sector_size, n);
 	}
 	put_dev_sector(sect);
 	return 1;

^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: [patch] IDE OnTrack remap for 2.5.58
@ 2003-01-21 11:08 Andries.Brouwer
  2003-01-21 12:02 ` Andre Hedrick
  2003-01-21 23:01 ` Alan Cox
  0 siblings, 2 replies; 11+ messages in thread
From: Andries.Brouwer @ 2003-01-21 11:08 UTC (permalink / raw)
  To: alan, jim.houston; +Cc: linux-kernel

    On Thu, 2003-01-16 at 18:14, Jim Houston wrote:
    > I went back and looked through the patches and found that the remapping
    > support was removed in patch-2.5.30.  The comments in the mailing list
    > suggest that it belonged in user space.

[of course a shift cannot be done in user space]

    > I have not found code/instructions on how to do this.
    > Since then, most of IDE code has been reverted to the
    > 2.4 versions but not this bit.

    This was done without the involvement of the IDE maintainers.
    Please direct complaints to Andries Brouwer. Come 2.6 the vendors
    will all be merging it back into their trees.

    Alan

Ha, Alan -

I think both Andre and Martin were happy, but maybe you mean nobody
asked you? Are you unhappy with this change? And if so, why?

Andries

^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: [patch] IDE OnTrack remap for 2.5.58
@ 2003-01-22  1:34 Andries.Brouwer
  2003-01-28 13:25 ` Alan Cox
  0 siblings, 1 reply; 11+ messages in thread
From: Andries.Brouwer @ 2003-01-22  1:34 UTC (permalink / raw)
  To: Andries.Brouwer, alan; +Cc: jim.houston, linux-kernel

>> Are you unhappy with this change? And if so, why?

> By volume of mail I get about it.
> I hadn't realised just how common DM was.

Any numbers?
I do coach someone in getting rid of DM or EZD
perhaps once or twice a month.

As far as I can see, it is rare that DM is needed.
What sometimes happens is that DM is preinstalled on a disk,
and users first become aware of it when there are problems.

Andries

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2003-01-28 13:17 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-01-16 18:14 [patch] IDE OnTrack remap for 2.5.58 Jim Houston
2003-01-16 18:28 ` Andre Hedrick
2003-01-16 19:56 ` Andries Brouwer
2003-01-16 22:40 ` David Woodhouse
2003-01-17 14:40 ` Bill Davidsen
2003-01-20  8:25 ` Alan
  -- strict thread matches above, loose matches on Subject: below --
2003-01-21 11:08 Andries.Brouwer
2003-01-21 12:02 ` Andre Hedrick
2003-01-21 23:01 ` Alan Cox
2003-01-22  1:34 Andries.Brouwer
2003-01-28 13:25 ` Alan Cox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox