scsi: pm80xx: Make running_req atomic
Incorrect value of the running_req was causing the driver unload to be stuck during the SAS lldd_dev_gone notification handling. During SATA I/O completion, for some error status values, the driver schedules the event handler and running_req is decremented from that. However, there are some other error status values (like IO_DS_IN_RECOVERY, IO_XFER_ERR_LAST_PIO_DATAIN_CRC_ERR) where the I/O has already been completed by fw/driver so running_req is not decremented. Also during NCQ error handling, driver itself will initiate READ_LOG_EXT and ABORT_ALL. When libsas/libata initiate READ_LOG_EXT (0x2F), driver increments running_req. This will be completed by the driver in pm80xx_chip_sata_req(), but running_req was not decremented. Link: https://lore.kernel.org/r/20201102165528.26510-3-Viswas.G@microchip.com.com Acked-by:Jack Wang <jinpu.wang@cloud.ionos.com> Signed-off-by:
Viswas G <Viswas.G@microchip.com> Signed-off-by:
Ruksar Devadi <Ruksar.devadi@microchip.com> Signed-off-by:
Martin K. Petersen <martin.petersen@oracle.com>
Showing
- drivers/scsi/pm8001/pm8001_hwi.c 47 additions, 11 deletionsdrivers/scsi/pm8001/pm8001_hwi.c
- drivers/scsi/pm8001/pm8001_init.c 1 addition, 1 deletiondrivers/scsi/pm8001/pm8001_init.c
- drivers/scsi/pm8001/pm8001_sas.c 7 additions, 4 deletionsdrivers/scsi/pm8001/pm8001_sas.c
- drivers/scsi/pm8001/pm8001_sas.h 1 addition, 1 deletiondrivers/scsi/pm8001/pm8001_sas.h
- drivers/scsi/pm8001/pm80xx_hwi.c 91 additions, 10 deletionsdrivers/scsi/pm8001/pm80xx_hwi.c
Loading
Please register or sign in to comment