scsi: qedf: Modify flush routine to handle all I/Os and TMF
The purpose of flush routine is to cleanup I/Os to the firmware and complete them to scsi middle layer. This routine is invoked before connection is uploaded because of rport going away. - Don't process any I/Os, aborts, TMFs coming when flush in progress. - Add flags to handle cleanup and release of I/Os because flush can prematurely complete I/Os. - Original command can get completed to driver when cleanup for same is posted to firmware, handle this condition. - Modify flush to handle I/Os in all the states like abort, TMF, RRQ and timeouts. Signed-off-by: Shyam Sundar <ssundar@marvell.com> Signed-off-by: Chad Dupuis <cdupuis@marvell.com> Signed-off-by: Saurav Kashyap <skashyap@marvell.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Este cometimento está contido em:

cometido por
Martin K. Petersen

ascendente
3e2c11b3fb
cometimento
5d5e55659b
@@ -135,6 +135,8 @@ static int qedf_initiate_els(struct qedf_rport *fcport, unsigned int op,
|
||||
QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_ELS, "Ringing doorbell for ELS "
|
||||
"req\n");
|
||||
qedf_ring_doorbell(fcport);
|
||||
set_bit(QEDF_CMD_OUTSTANDING, &els_req->flags);
|
||||
|
||||
spin_unlock_irqrestore(&fcport->rport_lock, flags);
|
||||
els_err:
|
||||
return rc;
|
||||
@@ -151,6 +153,8 @@ void qedf_process_els_compl(struct qedf_ctx *qedf, struct fcoe_cqe *cqe,
|
||||
QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_ELS, "Entered with xid = 0x%x"
|
||||
" cmd_type = %d.\n", els_req->xid, els_req->cmd_type);
|
||||
|
||||
clear_bit(QEDF_CMD_OUTSTANDING, &els_req->flags);
|
||||
|
||||
/* Kill the ELS timer */
|
||||
cancel_delayed_work(&els_req->timeout_work);
|
||||
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador