sata_mv: improve warnings about Highpoint RocketRAID 23xx cards
authorMark Lord <liml@rtr.ca>
Tue, 11 Dec 2007 17:58:05 +0000 (12:58 -0500)
committerJeff Garzik <jeff@garzik.org>
Tue, 18 Dec 2007 01:33:12 +0000 (20:33 -0500)
Improve the existing boot/load time warnings from sata_mv
for Highpoint RocketRAID 23xx cards, based on new knowledge
about where the BIOS likes to overwrite sectors with metadata.

Harmless to us, but very useful for end users.

Signed-off-by: Mark Lord <mlord@pobox.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/sata_mv.c

index fe0105d35bae130b1077b1b8bec411859bf13460..37b850ae084559d573e125a096cbdfe0eac3f958 100644 (file)
@@ -2506,11 +2506,31 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
                if (pdev->vendor == PCI_VENDOR_ID_TTI &&
                    (pdev->device == 0x2300 || pdev->device == 0x2310))
                {
-                       printk(KERN_WARNING "sata_mv: Highpoint RocketRAID BIOS"
-                               " will CORRUPT DATA on attached drives when"
-                               " configured as \"Legacy\".  BEWARE!\n");
-                       printk(KERN_WARNING "sata_mv: Use BIOS \"JBOD\" volumes"
-                               " instead for safety.\n");
+                       /*
+                        * Highpoint RocketRAID PCIe 23xx series cards:
+                        *
+                        * Unconfigured drives are treated as "Legacy"
+                        * by the BIOS, and it overwrites sector 8 with
+                        * a "Lgcy" metadata block prior to Linux boot.
+                        *
+                        * Configured drives (RAID or JBOD) leave sector 8
+                        * alone, but instead overwrite a high numbered
+                        * sector for the RAID metadata.  This sector can
+                        * be determined exactly, by truncating the physical
+                        * drive capacity to a nice even GB value.
+                        *
+                        * RAID metadata is at: (dev->n_sectors & ~0xfffff)
+                        *
+                        * Warn the user, lest they think we're just buggy.
+                        */
+                       printk(KERN_WARNING DRV_NAME ": Highpoint RocketRAID"
+                               " BIOS CORRUPTS DATA on all attached drives,"
+                               " regardless of if/how they are configured."
+                               " BEWARE!\n");
+                       printk(KERN_WARNING DRV_NAME ": For data safety, do not"
+                               " use sectors 8-9 on \"Legacy\" drives,"
+                               " and avoid the final two gigabytes on"
+                               " all RocketRAID BIOS initialized drives.\n");
                }
        case chip_6042:
                hpriv->ops = &mv6xxx_ops;