libata: fix off-by-one in error categorization
authorTejun Heo <htejun@gmail.com>
Wed, 2 Jan 2008 16:21:14 +0000 (01:21 +0900)
committerJeff Garzik <jeff@garzik.org>
Wed, 23 Jan 2008 10:24:17 +0000 (05:24 -0500)
ATA_ECAT_DUBIOUS_BASE was too high by one and thus all DUBIOUS error
categorizations were wrong.  This passed test because only ATA_BUS and
UNK_DEV were used during testing and the ones after them - ATA_BUS and
an overflowed entry - behaved similarly.

This patch fixes the problem by adding DUBIOUS_NONE category and use
it as base.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/libata-eh.c

index 419552603a1640a3ca892966a477986116d057a6..4e31071acc02b15f270a2f76ea752b4a4896f822 100644 (file)
@@ -61,12 +61,11 @@ enum {
        ATA_ECAT_ATA_BUS                = 1,
        ATA_ECAT_TOUT_HSM               = 2,
        ATA_ECAT_UNK_DEV                = 3,
-       ATA_ECAT_DUBIOUS_ATA_BUS        = 4,
-       ATA_ECAT_DUBIOUS_TOUT_HSM       = 5,
-       ATA_ECAT_DUBIOUS_UNK_DEV        = 6,
-       ATA_ECAT_NR                     = 7,
-
-       ATA_ECAT_DUBIOUS_BASE           = ATA_ECAT_DUBIOUS_ATA_BUS,
+       ATA_ECAT_DUBIOUS_NONE           = 4,
+       ATA_ECAT_DUBIOUS_ATA_BUS        = 5,
+       ATA_ECAT_DUBIOUS_TOUT_HSM       = 6,
+       ATA_ECAT_DUBIOUS_UNK_DEV        = 7,
+       ATA_ECAT_NR                     = 8,
 };
 
 /* Waiting in ->prereset can never be reliable.  It's sometimes nice
@@ -1499,7 +1498,7 @@ static int ata_eh_categorize_error(unsigned int eflags, unsigned int err_mask,
                *xfer_ok = 1;
 
        if (!*xfer_ok)
-               base = ATA_ECAT_DUBIOUS_BASE;
+               base = ATA_ECAT_DUBIOUS_NONE;
 
        if (err_mask & AC_ERR_ATA_BUS)
                return base + ATA_ECAT_ATA_BUS;