diff options
author | Tejun Heo <tj@kernel.org> | 2008-07-31 03:07:04 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-08-22 02:19:39 -0400 |
commit | a674050e068a2919908730279f0b731ae6d2e005 (patch) | |
tree | aa0fe8d065233fc32e458a861a50b20271f99555 /drivers/ata | |
parent | eb3a55a9f43f0f8e770c2abf70e65bdda2d5ff1e (diff) |
libata: fix EH action overwriting in ata_eh_reset()
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 <tj@kernel.org>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/libata-eh.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index a570ca47e239..c98909ba0b1c 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -2251,10 +2251,10 @@ int ata_eh_reset(struct ata_link *link, int classify, | |||
2251 | ehc->i.action &= ~ATA_EH_RESET; | 2251 | ehc->i.action &= ~ATA_EH_RESET; |
2252 | if (hardreset) { | 2252 | if (hardreset) { |
2253 | reset = hardreset; | 2253 | reset = hardreset; |
2254 | ehc->i.action = ATA_EH_HARDRESET; | 2254 | ehc->i.action |= ATA_EH_HARDRESET; |
2255 | } else if (softreset) { | 2255 | } else if (softreset) { |
2256 | reset = softreset; | 2256 | reset = softreset; |
2257 | ehc->i.action = ATA_EH_SOFTRESET; | 2257 | ehc->i.action |= ATA_EH_SOFTRESET; |
2258 | } | 2258 | } |
2259 | 2259 | ||
2260 | if (prereset) { | 2260 | if (prereset) { |