Re: [PATCH 11/16] libata-eh-fw: implement new EH scheduling via timeout

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeff Garzik wrote:
Tejun Heo wrote:
Implement new EH scheduling from timeout.  ata_scsi_timedout() also
takes care of the race condition in which scsi_eh_schedule_qc() sets
ATA_QCFLAG_EH_SCHEDULED but fails to acutally schedule EH for the qc
because it loses to timeout.

A timeout is HSM violation condition.  New EH assumes that on a
timeout the state of the controller and devices are unknown and
dangerous.  So, all active commands are aborted and the port is
frozen.  Note that commands which get aborted this way don't have its
qc->err_mask set and its retries count will be compensated.

Signed-off-by: Tejun Heo <htejun@xxxxxxxxx>

This is not always true: With PCI IDE BMDMA devices, it is presumed that a DMA error will be handled by timeout. For this case, the controller is in a known state.


The problem is that the timeout handler doesn't have anyway to determine whether the timeout is from real timeout or from DMA error, and the timeout handler is responsible for transferring the ownership the failed port to EH. EH, on entry, must be guaranteed that it owns the port if it's not frozen.

One way around this would be making a new callback, say, ->timeout_autopsy and let it decide whether the port needs freezing or not, but it would be an overkill. The only side effect of being frozen is that the port will get a softreset to thaw it, which isn't so bad - I want my controller to get a good spanking in the ass after sitting idle for 30secs.

--
tejun
-
: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux