Thread (14 messages) 14 messages, 6 authors, 2016-06-06

Re: [PATCH v2 1/2] scsi: fix race between simultaneous decrements of ->host_failed

From: Wei Fang <hidden>
Date: 2016-06-02 01:58:30
Also in: linux-scsi

Hi, James,

On 2016/6/1 22:06, James Bottomley wrote:
On Tue, 2016-05-31 at 16:38 +0800, Wei Fang wrote:
quoted
sas_ata_strategy_handler() adds the works of the ata error handler
to system_unbound_wq. This workqueue asynchronously runs work items,
so the ata error handler will be performed concurrently on different
CPUs. In this case, ->host_failed will be decreased simultaneously in
scsi_eh_finish_cmd() on different CPUs, and become abnormal.

It will lead to permanently inequal between ->host_failed and
 ->host_busy, and scsi error handler thread won't become running.
IO errors after that won't be handled forever.

Use atomic type for ->host_failed to fix this race.
As I said previously, you don't need atomics to do this, could you just
remove the decrement in scsi_eh_finish_command() and zero the counter
after the strategy handler completes.
OK, I'll send v3 later.

Thanks,
Wei
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help