Re: [PATCH] ata: fix a race condition when internal cmd time out

From: Jason Yan
Date: Sat Feb 16 2019 - 03:44:02 EST


Hi, Sergei

Thanks for the review.

On 2019/2/16 15:45, Sergei Shtylyov wrote:
Hello!

On 16.02.2019 6:42, Jason Yan wrote:

For internal cmds, we will unmap DMA memory associated with the cmd
before we abort the cmd. If DMA transfering data before the aborting,

ÂÂ Transferring.

bus error will occured.

ÂÂ Occur.

ata_exec_internal_sg
ÂÂ ->ata_port_freeze if timeout
ÂÂÂÂ ->ata_qc_complete
ÂÂÂÂÂÂ ->ata_sg_clean
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ dma transfering data = bus error
ÂÂ ->ap->ops->post_internal_cmd
ÂÂÂÂ ->sas_ata_post_internal
ÂÂÂÂÂÂ ->sas_ata_internal_abort
ÂÂÂÂÂÂÂÂ ->abort the cmd

Fix this by move post_internal_cmd() before unmapping the DMA memory

ÂÂ Moving.

when time out. Notice that we have to set ATA_QCFLAG_FAILED flag before
calling post_internal_cmd() so that the aborting will work.

Reported-by: luojian <luojian5@xxxxxxxxxx>
Signed-off-by: Jason Yan <yanaijie@xxxxxxxxxx>
[...]

MBR, Sergei