[SCSI] be2iscsi: Fix negotiated parameters upload to FW
authorJayamohan Kallickal <jayamohank@gmail.com>
Sat, 28 Sep 2013 22:35:41 +0000 (15:35 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Fri, 25 Oct 2013 08:58:05 +0000 (09:58 +0100)
- Removed the check of MaxXmitDSL == 0 as this is not a possible
  case.
- Update connection offload data structure for SKH-R adapters.

Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/be2iscsi/be_iscsi.c
drivers/scsi/be2iscsi/be_main.h
drivers/scsi/be2iscsi/be_mgmt.c

index 2496ea7dab780a2c74b091280a3b2e1d7abe5f41..f698f7aa7ef9bd6fc697888fdc42185cda07d922 100644 (file)
@@ -672,8 +672,7 @@ int beiscsi_set_param(struct iscsi_cls_conn *cls_conn,
                        session->max_burst = 262144;
                break;
        case ISCSI_PARAM_MAX_XMIT_DLENGTH:
-               if ((conn->max_xmit_dlength > 65536) ||
-                   (conn->max_xmit_dlength == 0))
+               if (conn->max_xmit_dlength > 65536)
                        conn->max_xmit_dlength = 65536;
        default:
                return 0;
@@ -924,6 +923,10 @@ static void  beiscsi_set_params_for_offld(struct beiscsi_conn *beiscsi_conn,
                      session->max_r2t);
        AMAP_SET_BITS(struct amap_beiscsi_offload_params, exp_statsn, params,
                      (conn->exp_statsn - 1));
+       AMAP_SET_BITS(struct amap_beiscsi_offload_params,
+                     max_recv_data_segment_length, params,
+                     conn->max_recv_dlength);
+
 }
 
 /**
index 5165515652bfb2014c9bebb19be28c6f079a912d..ec75c53de7b624e5af754c240993bdce3de9d7cf 100644 (file)
@@ -477,7 +477,7 @@ struct amap_iscsi_sge {
 };
 
 struct beiscsi_offload_params {
-       u32 dw[5];
+       u32 dw[6];
 };
 
 #define OFFLD_PARAMS_ERL       0x00000003
@@ -507,6 +507,7 @@ struct amap_beiscsi_offload_params {
        u8 max_r2t[16];
        u8 pad[8];
        u8 exp_statsn[32];
+       u8 max_recv_data_segment_length[32];
 };
 
 /* void hwi_complete_drvr_msgs(struct beiscsi_conn *beiscsi_conn,
@@ -888,30 +889,32 @@ struct amap_iscsi_target_context_update_wrb_v2 {
        u8 first_burst_length[24]; /* DWORD 3 */
        u8 rsvd3[8]; /* DOWRD 3 */
        u8 max_r2t[16]; /* DWORD 4 */
-       u8 rsvd4[10];   /* DWORD 4 */
+       u8 rsvd4;       /* DWORD 4 */
        u8 hde;         /* DWORD 4 */
        u8 dde;         /* DWORD 4 */
        u8 erl[2];      /* DWORD 4 */
+       u8 rsvd5[6];    /* DWORD 4 */
        u8 imd;         /* DWORD 4 */
        u8 ir2t;        /* DWORD 4 */
+       u8 rsvd6[3];    /* DWORD 4 */
        u8 stat_sn[32];     /* DWORD 5 */
-       u8 rsvd5[32];   /* DWORD 6 */
-       u8 rsvd6[32];   /* DWORD 7 */
+       u8 rsvd7[32];   /* DWORD 6 */
+       u8 rsvd8[32];   /* DWORD 7 */
        u8 max_recv_dataseg_len[24];    /* DWORD 8 */
-       u8 rsvd7[8]; /* DWORD 8 */
-       u8 rsvd8[32];   /* DWORD 9 */
-       u8 rsvd9[32];   /* DWORD 10 */
+       u8 rsvd9[8]; /* DWORD 8 */
+       u8 rsvd10[32];   /* DWORD 9 */
+       u8 rsvd11[32];   /* DWORD 10 */
        u8 max_cxns[16]; /* DWORD 11 */
-       u8 rsvd10[11]; /* DWORD  11*/
+       u8 rsvd12[11]; /* DWORD  11*/
        u8 invld; /* DWORD 11 */
-       u8 rsvd11;/* DWORD 11*/
+       u8 rsvd13;/* DWORD 11*/
        u8 dmsg; /* DWORD 11 */
        u8 data_seq_inorder; /* DWORD 11 */
        u8 pdu_seq_inorder; /* DWORD 11 */
-       u8 rsvd12[32]; /*DWORD 12 */
-       u8 rsvd13[32]; /* DWORD 13 */
-       u8 rsvd14[32]; /* DWORD 14 */
-       u8 rsvd15[32]; /* DWORD 15 */
+       u8 rsvd14[32]; /*DWORD 12 */
+       u8 rsvd15[32]; /* DWORD 13 */
+       u8 rsvd16[32]; /* DWORD 14 */
+       u8 rsvd17[32]; /* DWORD 15 */
 } __packed;
 
 
index 245a9595a93a131449fd660a7b7d8bd0e9e7f3b5..2efad040b6aec3ea52f97e23829a8eb8cbd67a40 100644 (file)
@@ -1411,10 +1411,6 @@ void beiscsi_offload_cxn_v2(struct beiscsi_offload_params *params,
 
        memset(pwrb, 0, sizeof(*pwrb));
 
-       AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb,
-                     max_burst_length, pwrb, params->dw[offsetof
-                     (struct amap_beiscsi_offload_params,
-                     max_burst_length) / 32]);
        AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2,
                      max_burst_length, pwrb, params->dw[offsetof
                      (struct amap_beiscsi_offload_params,
@@ -1436,7 +1432,9 @@ void beiscsi_offload_cxn_v2(struct beiscsi_offload_params *params,
                      params->dw[offsetof(struct amap_beiscsi_offload_params,
                      first_burst_length) / 32]);
        AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2,
-                     max_recv_dataseg_len, pwrb, BEISCSI_MAX_RECV_DATASEG_LEN);
+                     max_recv_dataseg_len, pwrb,
+                     params->dw[offsetof(struct amap_beiscsi_offload_params,
+                     max_recv_data_segment_length) / 32]);
        AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2,
                      max_cxns, pwrb, BEISCSI_MAX_CXNS);
        AMAP_SET_BITS(struct amap_iscsi_target_context_update_wrb_v2, erl, pwrb,