On Tue, 2017-12-05 at 13:18 +0300, Pavel Tikhomirov wrote:
On 12/04/2017 09:06 PM, Bart Van Assche wrote:
+static void scsi_eh_inc_host_failed(struct rcu_head *head) +{
- struct Scsi_Host *shost = container_of(head, typeof(*shost), rcu);
- unsigned long flags;
- spin_lock_irqsave(shost->host_lock, flags);
- shost->host_failed++;
May be we need to increment host_failed before call_rcu(), so that all rcu protected readers already see a change at these point?
Sorry but I don't think that would work. If host_failed would be changed first then it can happen that scsi_dec_host_busy() encounters that the host state is "running" and hence that it skips the host_failed check. That can result in a missed error handler wakeup, which is what we want to avoid.
Bart.