postreset(slave, classes);
        }
 
-       /* clear cached SError */
+       /*
+        * Some controllers can't be frozen very well and may set
+        * spuruious error conditions during reset.  Clear accumulated
+        * error information.  As reset is the final recovery action,
+        * nothing is lost by doing this.
+        */
        spin_lock_irqsave(link->ap->lock, flags);
-       link->eh_info.serror = 0;
+       memset(&link->eh_info, 0, sizeof(link->eh_info));
        if (slave)
-               slave->eh_info.serror = 0;
+               memset(&slave->eh_info, 0, sizeof(link->eh_info));
+       ap->pflags &= ~ATA_PFLAG_EH_PENDING;
        spin_unlock_irqrestore(link->ap->lock, flags);
 
        /* Make sure onlineness and classification result correspond.