aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ata/libata-eh.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index c0e9a42e6ae7..1f84e40fa6ae 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2063,6 +2063,7 @@ int ata_eh_reset(struct ata_link *link, int classify,
2063 ata_prereset_fn_t prereset, ata_reset_fn_t softreset, 2063 ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
2064 ata_reset_fn_t hardreset, ata_postreset_fn_t postreset) 2064 ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
2065{ 2065{
2066 struct ata_port *ap = link->ap;
2066 struct ata_eh_context *ehc = &link->eh_context; 2067 struct ata_eh_context *ehc = &link->eh_context;
2067 unsigned int *classes = ehc->classes; 2068 unsigned int *classes = ehc->classes;
2068 int verbose = !(ehc->i.flags & ATA_EHI_QUIET); 2069 int verbose = !(ehc->i.flags & ATA_EHI_QUIET);
@@ -2071,9 +2072,14 @@ int ata_eh_reset(struct ata_link *link, int classify,
2071 unsigned long deadline; 2072 unsigned long deadline;
2072 unsigned int action; 2073 unsigned int action;
2073 ata_reset_fn_t reset; 2074 ata_reset_fn_t reset;
2075 unsigned long flags;
2074 int rc; 2076 int rc;
2075 2077
2076 /* about to reset */ 2078 /* about to reset */
2079 spin_lock_irqsave(ap->lock, flags);
2080 ap->pflags |= ATA_PFLAG_RESETTING;
2081 spin_unlock_irqrestore(ap->lock, flags);
2082
2077 ata_eh_about_to_do(link, NULL, ehc->i.action & ATA_EH_RESET_MASK); 2083 ata_eh_about_to_do(link, NULL, ehc->i.action & ATA_EH_RESET_MASK);
2078 2084
2079 /* Determine which reset to use and record in ehc->i.action. 2085 /* Determine which reset to use and record in ehc->i.action.
@@ -2231,6 +2237,11 @@ int ata_eh_reset(struct ata_link *link, int classify,
2231 out: 2237 out:
2232 /* clear hotplug flag */ 2238 /* clear hotplug flag */
2233 ehc->i.flags &= ~ATA_EHI_HOTPLUGGED; 2239 ehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
2240
2241 spin_lock_irqsave(ap->lock, flags);
2242 ap->pflags &= ~ATA_PFLAG_RESETTING;
2243 spin_unlock_irqrestore(ap->lock, flags);
2244
2234 return rc; 2245 return rc;
2235} 2246}
2236 2247