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.