libata: fix off-by-one in error categorization
PATCH 1/1 libata: fix off-by-one in error categorization
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 <[email protected]>
--- drivers/ata/libata-eh.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
drivers/ata/libata-eh.c +6 -7
@@ -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
@@ -1498,7 +1497,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 ;
Quoted 9 lines · Tejun Heo
ATA_ECAT_DUBIOUS_BASEwas too high by one and thus all DUBIOUS error categorizations were wrong. This passed test because onlyATA_BUSandUNK_DEVwere used during testing and the ones after them -ATA_BUSand an overflowed entry - behaved similarly.This patch fixes the problem by adding
DUBIOUS_NONEcategory and use it as base.Signed-off-by Tejun Heo <[email protected]>
Ping.
Signature · 1 line
tejun