mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-16 13:46:44 +07:00
scsi: qedf: Fix race between ELS completion and flushing ELS request
Fix race between ELS completion and flushing ELS request. Link: https://lore.kernel.org/r/20200807110656.19965-8-jhasan@marvell.com Signed-off-by: Saurav Kashyap <skashyap@marvell.com> Signed-off-by: Javed Hasan <jhasan@marvell.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
22ddec31b0
commit
3079285bd7
@ -143,6 +143,7 @@ void qedf_process_els_compl(struct qedf_ctx *qedf, struct fcoe_cqe *cqe,
|
||||
struct qedf_ioreq *els_req)
|
||||
{
|
||||
struct fcoe_cqe_midpath_info *mp_info;
|
||||
struct qedf_rport *fcport;
|
||||
|
||||
QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_ELS, "Entered with xid = 0x%x"
|
||||
" cmd_type = %d.\n", els_req->xid, els_req->cmd_type);
|
||||
@ -156,6 +157,19 @@ void qedf_process_els_compl(struct qedf_ctx *qedf, struct fcoe_cqe *cqe,
|
||||
return;
|
||||
}
|
||||
|
||||
fcport = els_req->fcport;
|
||||
|
||||
/* When flush is active,
|
||||
* let the cmds be completed from the cleanup context
|
||||
*/
|
||||
if (test_bit(QEDF_RPORT_IN_TARGET_RESET, &fcport->flags) ||
|
||||
test_bit(QEDF_RPORT_IN_LUN_RESET, &fcport->flags)) {
|
||||
QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_IO,
|
||||
"Dropping ELS completion xid=0x%x as fcport is flushing",
|
||||
els_req->xid);
|
||||
return;
|
||||
}
|
||||
|
||||
clear_bit(QEDF_CMD_OUTSTANDING, &els_req->flags);
|
||||
|
||||
/* Kill the ELS timer */
|
||||
|
@ -1562,6 +1562,8 @@ static void qedf_flush_els_req(struct qedf_ctx *qedf,
|
||||
*/
|
||||
els_req->event = QEDF_IOREQ_EV_ELS_FLUSH;
|
||||
|
||||
clear_bit(QEDF_CMD_OUTSTANDING, &els_req->flags);
|
||||
|
||||
/* Cancel the timer */
|
||||
cancel_delayed_work_sync(&els_req->timeout_work);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user