diff options
author | Jayamohan Kallickal <jayamohank@gmail.com> | 2013-04-05 23:38:37 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2013-05-02 11:21:19 -0400 |
commit | 702dc5e868926056349e12a41bd70a4a4eb94940 (patch) | |
tree | 65a7d80171ac7c7640ee88b743ae22f5564268a2 /drivers/scsi | |
parent | ad3f428e0fbab1f306cbc22340e9f7672a49147f (diff) |
[SCSI] be2iscsi: Fix issue in passing the exp_cmdsn and max_cmdsn
Command Window value from the CQE was used to calculate the
max_cmdsn for that session.The command window value extracted
for SKH-R adapter was not proper. The value was extracted from
BE adapter completion event. Fixed the issue by getting the
cmd_wnd value from SKH-R CQE.
The exp_cmdsn and max_cmdsn values were not converted to BE format
before calling the __iscsi_complete_pdu(). Fixed the issue of converting
to BE format.
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: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/be2iscsi/be_main.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c index fe30e3fe7eed..d24a2867bc21 100644 --- a/drivers/scsi/be2iscsi/be_main.c +++ b/drivers/scsi/be2iscsi/be_main.c | |||
@@ -1326,8 +1326,9 @@ be_complete_logout(struct beiscsi_conn *beiscsi_conn, | |||
1326 | hdr->t2retain = 0; | 1326 | hdr->t2retain = 0; |
1327 | hdr->flags = csol_cqe->i_flags; | 1327 | hdr->flags = csol_cqe->i_flags; |
1328 | hdr->response = csol_cqe->i_resp; | 1328 | hdr->response = csol_cqe->i_resp; |
1329 | hdr->exp_cmdsn = csol_cqe->exp_cmdsn; | 1329 | hdr->exp_cmdsn = cpu_to_be32(csol_cqe->exp_cmdsn); |
1330 | hdr->max_cmdsn = (csol_cqe->exp_cmdsn + csol_cqe->cmd_wnd - 1); | 1330 | hdr->max_cmdsn = cpu_to_be32(csol_cqe->exp_cmdsn + |
1331 | csol_cqe->cmd_wnd - 1); | ||
1331 | 1332 | ||
1332 | hdr->dlength[0] = 0; | 1333 | hdr->dlength[0] = 0; |
1333 | hdr->dlength[1] = 0; | 1334 | hdr->dlength[1] = 0; |
@@ -1350,9 +1351,9 @@ be_complete_tmf(struct beiscsi_conn *beiscsi_conn, | |||
1350 | hdr->opcode = ISCSI_OP_SCSI_TMFUNC_RSP; | 1351 | hdr->opcode = ISCSI_OP_SCSI_TMFUNC_RSP; |
1351 | hdr->flags = csol_cqe->i_flags; | 1352 | hdr->flags = csol_cqe->i_flags; |
1352 | hdr->response = csol_cqe->i_resp; | 1353 | hdr->response = csol_cqe->i_resp; |
1353 | hdr->exp_cmdsn = csol_cqe->exp_cmdsn; | 1354 | hdr->exp_cmdsn = cpu_to_be32(csol_cqe->exp_cmdsn); |
1354 | hdr->max_cmdsn = (csol_cqe->exp_cmdsn + | 1355 | hdr->max_cmdsn = cpu_to_be32(csol_cqe->exp_cmdsn + |
1355 | csol_cqe->cmd_wnd - 1); | 1356 | csol_cqe->cmd_wnd - 1); |
1356 | 1357 | ||
1357 | hdr->itt = io_task->libiscsi_itt; | 1358 | hdr->itt = io_task->libiscsi_itt; |
1358 | __iscsi_complete_pdu(conn, (struct iscsi_hdr *)hdr, NULL, 0); | 1359 | __iscsi_complete_pdu(conn, (struct iscsi_hdr *)hdr, NULL, 0); |
@@ -1404,8 +1405,8 @@ be_complete_nopin_resp(struct beiscsi_conn *beiscsi_conn, | |||
1404 | hdr = (struct iscsi_nopin *)task->hdr; | 1405 | hdr = (struct iscsi_nopin *)task->hdr; |
1405 | hdr->flags = csol_cqe->i_flags; | 1406 | hdr->flags = csol_cqe->i_flags; |
1406 | hdr->exp_cmdsn = cpu_to_be32(csol_cqe->exp_cmdsn); | 1407 | hdr->exp_cmdsn = cpu_to_be32(csol_cqe->exp_cmdsn); |
1407 | hdr->max_cmdsn = be32_to_cpu(hdr->exp_cmdsn + | 1408 | hdr->max_cmdsn = cpu_to_be32(csol_cqe->exp_cmdsn + |
1408 | csol_cqe->cmd_wnd - 1); | 1409 | csol_cqe->cmd_wnd - 1); |
1409 | 1410 | ||
1410 | hdr->opcode = ISCSI_OP_NOOP_IN; | 1411 | hdr->opcode = ISCSI_OP_NOOP_IN; |
1411 | hdr->itt = io_task->libiscsi_itt; | 1412 | hdr->itt = io_task->libiscsi_itt; |
@@ -1446,7 +1447,7 @@ static void adapter_get_sol_cqe(struct beiscsi_hba *phba, | |||
1446 | cid, psol); | 1447 | cid, psol); |
1447 | csol_cqe->hw_sts = AMAP_GET_BITS(struct amap_sol_cqe_v2, | 1448 | csol_cqe->hw_sts = AMAP_GET_BITS(struct amap_sol_cqe_v2, |
1448 | hw_sts, psol); | 1449 | hw_sts, psol); |
1449 | csol_cqe->cmd_wnd = AMAP_GET_BITS(struct amap_sol_cqe, | 1450 | csol_cqe->cmd_wnd = AMAP_GET_BITS(struct amap_sol_cqe_v2, |
1450 | i_cmd_wnd, psol); | 1451 | i_cmd_wnd, psol); |
1451 | if (AMAP_GET_BITS(struct amap_sol_cqe_v2, | 1452 | if (AMAP_GET_BITS(struct amap_sol_cqe_v2, |
1452 | cmd_cmpl, psol)) | 1453 | cmd_cmpl, psol)) |