be2iscsi: Fix processing CQE before connection resources are freed

Driver should process the completion queue entries before a connection
 resources are freed. While running mixed traffic due to latency, driver
 processes the CQE after the connection resources are freed. This fix
 processes all the completion queue before the connection resources are
 freed.

Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
Jayamohan Kallickal
2014-08-08 01:00:01 -04:00
committed by Christoph Hellwig
parent a3d313ea56
commit b7ab35b133
3 changed files with 46 additions and 1 deletions

View File

@@ -1273,6 +1273,31 @@ int beiscsi_ep_poll(struct iscsi_endpoint *ep, int timeout_ms)
return 0;
}
/**
* beiscsi_flush_cq()- Flush the CQ created.
* @phba: ptr device priv structure.
*
* Before the connection resource are freed flush
* all the CQ enteries
**/
static void beiscsi_flush_cq(struct beiscsi_hba *phba)
{
uint16_t i;
struct be_eq_obj *pbe_eq;
struct hwi_controller *phwi_ctrlr;
struct hwi_context_memory *phwi_context;
phwi_ctrlr = phba->phwi_ctrlr;
phwi_context = phwi_ctrlr->phwi_ctxt;
for (i = 0; i < phba->num_cpus; i++) {
pbe_eq = &phwi_context->be_eq[i];
blk_iopoll_disable(&pbe_eq->iopoll);
beiscsi_process_cq(pbe_eq);
blk_iopoll_enable(&pbe_eq->iopoll);
}
}
/**
* beiscsi_close_conn - Upload the connection
* @ep: The iscsi endpoint
@@ -1294,6 +1319,10 @@ static int beiscsi_close_conn(struct beiscsi_endpoint *beiscsi_ep, int flag)
}
ret = beiscsi_mccq_compl(phba, tag, NULL, NULL);
/* Flush the CQ entries */
beiscsi_flush_cq(phba);
return ret;
}