On Mon, Feb 01, 2016 at 03:42:49PM +0530, Jitendra Bhivare wrote:
> Connection resets observed from some targets when NOP-Out with wrong
> ExpStatSn is sent.
> 
> FW keeps track of StatSn and fills up ExpStatSn accordingly.
> The header filled up by the stack needs to be modified by driver to clear
> ExpStatSn. If the field is not cleared, FW recalculates ExpStatSn and
> wrong offset'ed ExpStatSn is seen in the wire trace.
> 
> Signed-off-by: Jitendra Bhivare <jitendra.bhiv...@avagotech.com>
> ---
>  drivers/scsi/be2iscsi/be_main.c | 12 ++++--------
>  1 file changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
> index 3f08a11..03265b6 100644
> --- a/drivers/scsi/be2iscsi/be_main.c
> +++ b/drivers/scsi/be2iscsi/be_main.c
> @@ -4926,7 +4926,6 @@ int beiscsi_iotask_v2(struct iscsi_task *task, struct 
> scatterlist *sg,
>  
>       pwrb = io_task->pwrb_handle->pwrb;
>  
> -     io_task->cmd_bhs->iscsi_hdr.exp_statsn = 0;
>       io_task->bhs_len = sizeof(struct be_cmd_bhs);
>  
>       if (writedir) {
> @@ -4987,7 +4986,6 @@ static int beiscsi_iotask(struct iscsi_task *task, 
> struct scatterlist *sg,
>       unsigned int doorbell = 0;
>  
>       pwrb = io_task->pwrb_handle->pwrb;
> -     io_task->cmd_bhs->iscsi_hdr.exp_statsn = 0;
>       io_task->bhs_len = sizeof(struct be_cmd_bhs);
>  
>       if (writedir) {
> @@ -5159,23 +5157,21 @@ static int beiscsi_task_xmit(struct iscsi_task *task)
>  {
>       struct beiscsi_io_task *io_task = task->dd_data;
>       struct scsi_cmnd *sc = task->sc;
> -     struct beiscsi_hba *phba = NULL;
> +     struct beiscsi_hba *phba;
>       struct scatterlist *sg;
>       int num_sg;
>       unsigned int  writedir = 0, xferlen = 0;
>  
> -     phba = ((struct beiscsi_conn *)task->conn->dd_data)->phba;
> +     if (!io_task->conn->login_in_progress)
> +             task->hdr->exp_statsn = 0;
>  
>       if (!sc)
>               return beiscsi_mtask(task);
>  
>       io_task->scsi_cmnd = sc;
>       num_sg = scsi_dma_map(sc);
> +     phba = io_task->conn->phba;
>       if (num_sg < 0) {
> -             struct iscsi_conn *conn = task->conn;
> -             struct beiscsi_hba *phba = NULL;
> -
> -             phba = ((struct beiscsi_conn *)conn->dd_data)->phba;
>               beiscsi_log(phba, KERN_ERR,
>                           BEISCSI_LOG_IO | BEISCSI_LOG_ISCSI,
>                           "BM_%d : scsi_dma_map Failed "
> -- 
> 2.5.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reviewed-by: Johannes Thumshirn <jthumsh...@suse.de>
-- 
Johannes Thumshirn                                          Storage
jthumsh...@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to