From: Tejun Heo Date: Mon, 13 Oct 2008 23:19:59 +0000 (-0400) Subject: libata: fix EH action overwriting in ata_eh_reset() X-Git-Tag: v2.6.26.7~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dcbe5f2d841ed58a102195a7ded37fd7acdb7a52;p=thirdparty%2Fkernel%2Fstable.git libata: fix EH action overwriting in ata_eh_reset() Commit a674050e068a2919908730279f0b731ae6d2e005 upstream ehc->i.action got accidentally overwritten to ATA_EH_HARD/SOFTRESET in ata_eh_reset(). The original intention was to clear reset action which wasn't selected. This can cause unexpected behavior when other EH actions are scheduled together with reset. Fix it. Signed-off-by: Tejun Heo Signed-off-by: Jeff Garzik Cc: Chuck Ebbert Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 4b0f24fc89f7d..27023e37fc34a 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -2112,10 +2112,10 @@ int ata_eh_reset(struct ata_link *link, int classify, ehc->i.action &= ~ATA_EH_RESET; if (hardreset) { reset = hardreset; - ehc->i.action = ATA_EH_HARDRESET; + ehc->i.action |= ATA_EH_HARDRESET; } else if (softreset) { reset = softreset; - ehc->i.action = ATA_EH_SOFTRESET; + ehc->i.action |= ATA_EH_SOFTRESET; } if (prereset) {