diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-22 15:38:04 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-22 15:38:04 -0400 |
commit | 1ab142d499294b844ecc81e8004db4ce029b0b61 (patch) | |
tree | 9db85a456d0cba3de8b9bd6671b1b52fa939770c /drivers/target/iscsi | |
parent | 267d7b23dd62f6ec55e0fba777e456495c308fc7 (diff) | |
parent | 187e70a554e0f0717a65998bc9199945cbbd4692 (diff) |
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
Pull SCSI target updates from Nicholas Bellinger:
"This contains the usual set of updates and bugfixes to target-core +
existing fabric module code, along with a handful of the patches
destined for v3.3 stable.
It also contains the necessary target-core infrastructure pieces
required to run using tcm_qla2xxx.ko WWPNs with the new Qlogic Fibre
Channel fabric module currently queued in target-pending/for-next-merge,
and coming for round 2.
The highlights for this series include:
- Add target_submit_tmr() helper function for fabric task management
(andy)
- Convert tcm_fc to use target_submit_tmr() (andy)
- Replace target core various cmd flags with a transport state (hch)
- Convert loopback to use workqueue submission (hch)
- Convert target core to use array_zalloc for tpg_lun_list (joern)
- Convert target core to use array_zalloc for device_list (joern)
- Add target core support for TMR_ABORT_TASK (nab)
- Add target core se_sess->sess_kref + get/put helpers (nab)
- Add target core se_node_acl->acl_kref for ->acl_free_comp usage
(nab)
- Convert iscsi-target to use target_put_session + sess_kref (nab)
- Fix tcm_fc fc_exch memory leak in ft_send_resp_status (nab)
- Fix ib_srpt srpt_handle_cmd send_ioctx->ioctx_kref leak on
exception (nab)
- Fix target core up handling of short INQUIRY buffers (roland)
- Untangle target-core front-end and back-end meanings of max_sectors
attribute (roland)
- Set loopback residual field for SCSI commands (roland)
- Fix target-core 16-bit target ports for SET TARGET PORT GROUPS
emulation (roland)
Thanks again to Andy, Christoph, Joern, Roland, and everyone who has
contributed this round!"
* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (64 commits)
ib_srpt: Fix srpt_handle_cmd send_ioctx->ioctx_kref leak on exception
loopback: Fix transport_generic_allocate_tasks error handling
iscsi-target: remove improper externs
iscsi-target: Remove unused variables in iscsi_target_parameters.c
target: remove obvious warnings
target: Use array_zalloc for device_list
target: Use array_zalloc for tpg_lun_list
target: Fix sense code for unsupported SERVICE ACTION IN
target: Remove hack to make READ CAPACITY(10) lie if thin provisioning is enabled
target: Bump core version to v4.1.0-rc2-ml + fabric versions
tcm_fc: Fix fc_exch memory leak in ft_send_resp_status
target: Drop unused legacy target_core_fabric_ops API callers
iscsi-target: Convert to use target_put_session + sess_kref
target: Convert se_node_acl->acl_group removal to use ->acl_kref
target: Add se_node_acl->acl_kref for ->acl_free_comp usage
target: Add se_node_acl->acl_free_comp for NodeACL release path
target: Add se_sess->sess_kref + get/put helpers
target: Convert session_lock to irqsave
target: Fix typo in drivers/target
iscsi-target: Fix dynamic -> explict NodeACL pointer reference
...
Diffstat (limited to 'drivers/target/iscsi')
-rw-r--r-- | drivers/target/iscsi/iscsi_target.c | 41 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_configfs.c | 53 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_core.h | 2 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_device.c | 19 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_device.h | 2 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_erl0.c | 2 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_erl1.c | 2 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_login.c | 10 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_nego.c | 10 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_nodeattrib.c | 16 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_parameters.c | 19 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_tmr.c | 6 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_tq.c | 6 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_util.c | 7 |
14 files changed, 50 insertions, 145 deletions
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index 1c6f700f5faa..8b1d5e62ed40 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c | |||
@@ -781,7 +781,7 @@ static int iscsit_alloc_buffs(struct iscsi_cmd *cmd) | |||
781 | struct scatterlist *sgl; | 781 | struct scatterlist *sgl; |
782 | u32 length = cmd->se_cmd.data_length; | 782 | u32 length = cmd->se_cmd.data_length; |
783 | int nents = DIV_ROUND_UP(length, PAGE_SIZE); | 783 | int nents = DIV_ROUND_UP(length, PAGE_SIZE); |
784 | int i = 0, ret; | 784 | int i = 0, j = 0, ret; |
785 | /* | 785 | /* |
786 | * If no SCSI payload is present, allocate the default iovecs used for | 786 | * If no SCSI payload is present, allocate the default iovecs used for |
787 | * iSCSI PDU Header | 787 | * iSCSI PDU Header |
@@ -822,17 +822,15 @@ static int iscsit_alloc_buffs(struct iscsi_cmd *cmd) | |||
822 | */ | 822 | */ |
823 | ret = iscsit_allocate_iovecs(cmd); | 823 | ret = iscsit_allocate_iovecs(cmd); |
824 | if (ret < 0) | 824 | if (ret < 0) |
825 | goto page_alloc_failed; | 825 | return -ENOMEM; |
826 | 826 | ||
827 | return 0; | 827 | return 0; |
828 | 828 | ||
829 | page_alloc_failed: | 829 | page_alloc_failed: |
830 | while (i >= 0) { | 830 | while (j < i) |
831 | __free_page(sg_page(&sgl[i])); | 831 | __free_page(sg_page(&sgl[j++])); |
832 | i--; | 832 | |
833 | } | 833 | kfree(sgl); |
834 | kfree(cmd->t_mem_sg); | ||
835 | cmd->t_mem_sg = NULL; | ||
836 | return -ENOMEM; | 834 | return -ENOMEM; |
837 | } | 835 | } |
838 | 836 | ||
@@ -1007,8 +1005,8 @@ done: | |||
1007 | /* | 1005 | /* |
1008 | * The CDB is going to an se_device_t. | 1006 | * The CDB is going to an se_device_t. |
1009 | */ | 1007 | */ |
1010 | ret = iscsit_get_lun_for_cmd(cmd, hdr->cdb, | 1008 | ret = transport_lookup_cmd_lun(&cmd->se_cmd, |
1011 | get_unaligned_le64(&hdr->lun)); | 1009 | scsilun_to_int(&hdr->lun)); |
1012 | if (ret < 0) { | 1010 | if (ret < 0) { |
1013 | if (cmd->se_cmd.scsi_sense_reason == TCM_NON_EXISTENT_LUN) { | 1011 | if (cmd->se_cmd.scsi_sense_reason == TCM_NON_EXISTENT_LUN) { |
1014 | pr_debug("Responding to non-acl'ed," | 1012 | pr_debug("Responding to non-acl'ed," |
@@ -1364,7 +1362,7 @@ static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf) | |||
1364 | * outstanding_r2ts reaches zero, go ahead and send the delayed | 1362 | * outstanding_r2ts reaches zero, go ahead and send the delayed |
1365 | * TASK_ABORTED status. | 1363 | * TASK_ABORTED status. |
1366 | */ | 1364 | */ |
1367 | if (atomic_read(&se_cmd->t_transport_aborted) != 0) { | 1365 | if (se_cmd->transport_state & CMD_T_ABORTED) { |
1368 | if (hdr->flags & ISCSI_FLAG_CMD_FINAL) | 1366 | if (hdr->flags & ISCSI_FLAG_CMD_FINAL) |
1369 | if (--cmd->outstanding_r2ts < 1) { | 1367 | if (--cmd->outstanding_r2ts < 1) { |
1370 | iscsit_stop_dataout_timer(cmd); | 1368 | iscsit_stop_dataout_timer(cmd); |
@@ -1472,14 +1470,12 @@ static int iscsit_handle_nop_out( | |||
1472 | unsigned char *ping_data = NULL; | 1470 | unsigned char *ping_data = NULL; |
1473 | int cmdsn_ret, niov = 0, ret = 0, rx_got, rx_size; | 1471 | int cmdsn_ret, niov = 0, ret = 0, rx_got, rx_size; |
1474 | u32 checksum, data_crc, padding = 0, payload_length; | 1472 | u32 checksum, data_crc, padding = 0, payload_length; |
1475 | u64 lun; | ||
1476 | struct iscsi_cmd *cmd = NULL; | 1473 | struct iscsi_cmd *cmd = NULL; |
1477 | struct kvec *iov = NULL; | 1474 | struct kvec *iov = NULL; |
1478 | struct iscsi_nopout *hdr; | 1475 | struct iscsi_nopout *hdr; |
1479 | 1476 | ||
1480 | hdr = (struct iscsi_nopout *) buf; | 1477 | hdr = (struct iscsi_nopout *) buf; |
1481 | payload_length = ntoh24(hdr->dlength); | 1478 | payload_length = ntoh24(hdr->dlength); |
1482 | lun = get_unaligned_le64(&hdr->lun); | ||
1483 | hdr->itt = be32_to_cpu(hdr->itt); | 1479 | hdr->itt = be32_to_cpu(hdr->itt); |
1484 | hdr->ttt = be32_to_cpu(hdr->ttt); | 1480 | hdr->ttt = be32_to_cpu(hdr->ttt); |
1485 | hdr->cmdsn = be32_to_cpu(hdr->cmdsn); | 1481 | hdr->cmdsn = be32_to_cpu(hdr->cmdsn); |
@@ -1689,13 +1685,11 @@ static int iscsit_handle_task_mgt_cmd( | |||
1689 | struct se_tmr_req *se_tmr; | 1685 | struct se_tmr_req *se_tmr; |
1690 | struct iscsi_tmr_req *tmr_req; | 1686 | struct iscsi_tmr_req *tmr_req; |
1691 | struct iscsi_tm *hdr; | 1687 | struct iscsi_tm *hdr; |
1692 | u32 payload_length; | ||
1693 | int out_of_order_cmdsn = 0; | 1688 | int out_of_order_cmdsn = 0; |
1694 | int ret; | 1689 | int ret; |
1695 | u8 function; | 1690 | u8 function; |
1696 | 1691 | ||
1697 | hdr = (struct iscsi_tm *) buf; | 1692 | hdr = (struct iscsi_tm *) buf; |
1698 | payload_length = ntoh24(hdr->dlength); | ||
1699 | hdr->itt = be32_to_cpu(hdr->itt); | 1693 | hdr->itt = be32_to_cpu(hdr->itt); |
1700 | hdr->rtt = be32_to_cpu(hdr->rtt); | 1694 | hdr->rtt = be32_to_cpu(hdr->rtt); |
1701 | hdr->cmdsn = be32_to_cpu(hdr->cmdsn); | 1695 | hdr->cmdsn = be32_to_cpu(hdr->cmdsn); |
@@ -1747,8 +1741,8 @@ static int iscsit_handle_task_mgt_cmd( | |||
1747 | * Locate the struct se_lun for all TMRs not related to ERL=2 TASK_REASSIGN | 1741 | * Locate the struct se_lun for all TMRs not related to ERL=2 TASK_REASSIGN |
1748 | */ | 1742 | */ |
1749 | if (function != ISCSI_TM_FUNC_TASK_REASSIGN) { | 1743 | if (function != ISCSI_TM_FUNC_TASK_REASSIGN) { |
1750 | ret = iscsit_get_lun_for_tmr(cmd, | 1744 | ret = transport_lookup_tmr_lun(&cmd->se_cmd, |
1751 | get_unaligned_le64(&hdr->lun)); | 1745 | scsilun_to_int(&hdr->lun)); |
1752 | if (ret < 0) { | 1746 | if (ret < 0) { |
1753 | cmd->se_cmd.se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION; | 1747 | cmd->se_cmd.se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION; |
1754 | se_tmr->response = ISCSI_TMF_RSP_NO_LUN; | 1748 | se_tmr->response = ISCSI_TMF_RSP_NO_LUN; |
@@ -2207,14 +2201,10 @@ static int iscsit_handle_snack( | |||
2207 | struct iscsi_conn *conn, | 2201 | struct iscsi_conn *conn, |
2208 | unsigned char *buf) | 2202 | unsigned char *buf) |
2209 | { | 2203 | { |
2210 | u32 unpacked_lun; | ||
2211 | u64 lun; | ||
2212 | struct iscsi_snack *hdr; | 2204 | struct iscsi_snack *hdr; |
2213 | 2205 | ||
2214 | hdr = (struct iscsi_snack *) buf; | 2206 | hdr = (struct iscsi_snack *) buf; |
2215 | hdr->flags &= ~ISCSI_FLAG_CMD_FINAL; | 2207 | hdr->flags &= ~ISCSI_FLAG_CMD_FINAL; |
2216 | lun = get_unaligned_le64(&hdr->lun); | ||
2217 | unpacked_lun = scsilun_to_int((struct scsi_lun *)&lun); | ||
2218 | hdr->itt = be32_to_cpu(hdr->itt); | 2208 | hdr->itt = be32_to_cpu(hdr->itt); |
2219 | hdr->ttt = be32_to_cpu(hdr->ttt); | 2209 | hdr->ttt = be32_to_cpu(hdr->ttt); |
2220 | hdr->exp_statsn = be32_to_cpu(hdr->exp_statsn); | 2210 | hdr->exp_statsn = be32_to_cpu(hdr->exp_statsn); |
@@ -3514,7 +3504,6 @@ int iscsi_target_tx_thread(void *arg) | |||
3514 | struct iscsi_cmd *cmd = NULL; | 3504 | struct iscsi_cmd *cmd = NULL; |
3515 | struct iscsi_conn *conn; | 3505 | struct iscsi_conn *conn; |
3516 | struct iscsi_queue_req *qr = NULL; | 3506 | struct iscsi_queue_req *qr = NULL; |
3517 | struct se_cmd *se_cmd; | ||
3518 | struct iscsi_thread_set *ts = arg; | 3507 | struct iscsi_thread_set *ts = arg; |
3519 | /* | 3508 | /* |
3520 | * Allow ourselves to be interrupted by SIGINT so that a | 3509 | * Allow ourselves to be interrupted by SIGINT so that a |
@@ -3697,8 +3686,6 @@ check_rsp_state: | |||
3697 | goto transport_err; | 3686 | goto transport_err; |
3698 | } | 3687 | } |
3699 | 3688 | ||
3700 | se_cmd = &cmd->se_cmd; | ||
3701 | |||
3702 | if (map_sg && !conn->conn_ops->IFMarker) { | 3689 | if (map_sg && !conn->conn_ops->IFMarker) { |
3703 | if (iscsit_fe_sendpage_sg(cmd, conn) < 0) { | 3690 | if (iscsit_fe_sendpage_sg(cmd, conn) < 0) { |
3704 | conn->tx_response_queue = 0; | 3691 | conn->tx_response_queue = 0; |
@@ -4171,7 +4158,7 @@ int iscsit_close_connection( | |||
4171 | if (!atomic_read(&sess->session_reinstatement) && | 4158 | if (!atomic_read(&sess->session_reinstatement) && |
4172 | atomic_read(&sess->session_fall_back_to_erl0)) { | 4159 | atomic_read(&sess->session_fall_back_to_erl0)) { |
4173 | spin_unlock_bh(&sess->conn_lock); | 4160 | spin_unlock_bh(&sess->conn_lock); |
4174 | iscsit_close_session(sess); | 4161 | target_put_session(sess->se_sess); |
4175 | 4162 | ||
4176 | return 0; | 4163 | return 0; |
4177 | } else if (atomic_read(&sess->session_logout)) { | 4164 | } else if (atomic_read(&sess->session_logout)) { |
@@ -4292,7 +4279,7 @@ static void iscsit_logout_post_handler_closesession( | |||
4292 | iscsit_dec_conn_usage_count(conn); | 4279 | iscsit_dec_conn_usage_count(conn); |
4293 | iscsit_stop_session(sess, 1, 1); | 4280 | iscsit_stop_session(sess, 1, 1); |
4294 | iscsit_dec_session_usage_count(sess); | 4281 | iscsit_dec_session_usage_count(sess); |
4295 | iscsit_close_session(sess); | 4282 | target_put_session(sess->se_sess); |
4296 | } | 4283 | } |
4297 | 4284 | ||
4298 | static void iscsit_logout_post_handler_samecid( | 4285 | static void iscsit_logout_post_handler_samecid( |
@@ -4458,7 +4445,7 @@ int iscsit_free_session(struct iscsi_session *sess) | |||
4458 | } else | 4445 | } else |
4459 | spin_unlock_bh(&sess->conn_lock); | 4446 | spin_unlock_bh(&sess->conn_lock); |
4460 | 4447 | ||
4461 | iscsit_close_session(sess); | 4448 | target_put_session(sess->se_sess); |
4462 | return 0; | 4449 | return 0; |
4463 | } | 4450 | } |
4464 | 4451 | ||
diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c index 6b35b37988ed..00c58cc82c85 100644 --- a/drivers/target/iscsi/iscsi_target_configfs.c +++ b/drivers/target/iscsi/iscsi_target_configfs.c | |||
@@ -812,9 +812,6 @@ static struct se_node_acl *lio_target_make_nodeacl( | |||
812 | if (!se_nacl_new) | 812 | if (!se_nacl_new) |
813 | return ERR_PTR(-ENOMEM); | 813 | return ERR_PTR(-ENOMEM); |
814 | 814 | ||
815 | acl = container_of(se_nacl_new, struct iscsi_node_acl, | ||
816 | se_node_acl); | ||
817 | |||
818 | cmdsn_depth = ISCSI_TPG_ATTRIB(tpg)->default_cmdsn_depth; | 815 | cmdsn_depth = ISCSI_TPG_ATTRIB(tpg)->default_cmdsn_depth; |
819 | /* | 816 | /* |
820 | * se_nacl_new may be released by core_tpg_add_initiator_node_acl() | 817 | * se_nacl_new may be released by core_tpg_add_initiator_node_acl() |
@@ -825,7 +822,8 @@ static struct se_node_acl *lio_target_make_nodeacl( | |||
825 | if (IS_ERR(se_nacl)) | 822 | if (IS_ERR(se_nacl)) |
826 | return se_nacl; | 823 | return se_nacl; |
827 | 824 | ||
828 | stats_cg = &acl->se_node_acl.acl_fabric_stat_group; | 825 | acl = container_of(se_nacl, struct iscsi_node_acl, se_node_acl); |
826 | stats_cg = &se_nacl->acl_fabric_stat_group; | ||
829 | 827 | ||
830 | stats_cg->default_groups = kzalloc(sizeof(struct config_group) * 2, | 828 | stats_cg->default_groups = kzalloc(sizeof(struct config_group) * 2, |
831 | GFP_KERNEL); | 829 | GFP_KERNEL); |
@@ -1505,28 +1503,6 @@ static int iscsi_get_cmd_state(struct se_cmd *se_cmd) | |||
1505 | return cmd->i_state; | 1503 | return cmd->i_state; |
1506 | } | 1504 | } |
1507 | 1505 | ||
1508 | static int iscsi_is_state_remove(struct se_cmd *se_cmd) | ||
1509 | { | ||
1510 | struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd); | ||
1511 | |||
1512 | return (cmd->i_state == ISTATE_REMOVE); | ||
1513 | } | ||
1514 | |||
1515 | static int lio_sess_logged_in(struct se_session *se_sess) | ||
1516 | { | ||
1517 | struct iscsi_session *sess = se_sess->fabric_sess_ptr; | ||
1518 | int ret; | ||
1519 | /* | ||
1520 | * Called with spin_lock_bh(&tpg_lock); and | ||
1521 | * spin_lock(&se_tpg->session_lock); held. | ||
1522 | */ | ||
1523 | spin_lock(&sess->conn_lock); | ||
1524 | ret = (sess->session_state != TARG_SESS_STATE_LOGGED_IN); | ||
1525 | spin_unlock(&sess->conn_lock); | ||
1526 | |||
1527 | return ret; | ||
1528 | } | ||
1529 | |||
1530 | static u32 lio_sess_get_index(struct se_session *se_sess) | 1506 | static u32 lio_sess_get_index(struct se_session *se_sess) |
1531 | { | 1507 | { |
1532 | struct iscsi_session *sess = se_sess->fabric_sess_ptr; | 1508 | struct iscsi_session *sess = se_sess->fabric_sess_ptr; |
@@ -1700,8 +1676,8 @@ static int lio_tpg_shutdown_session(struct se_session *se_sess) | |||
1700 | atomic_set(&sess->session_reinstatement, 1); | 1676 | atomic_set(&sess->session_reinstatement, 1); |
1701 | spin_unlock(&sess->conn_lock); | 1677 | spin_unlock(&sess->conn_lock); |
1702 | 1678 | ||
1703 | iscsit_inc_session_usage_count(sess); | ||
1704 | iscsit_stop_time2retain_timer(sess); | 1679 | iscsit_stop_time2retain_timer(sess); |
1680 | iscsit_stop_session(sess, 1, 1); | ||
1705 | 1681 | ||
1706 | return 1; | 1682 | return 1; |
1707 | } | 1683 | } |
@@ -1717,28 +1693,9 @@ static void lio_tpg_close_session(struct se_session *se_sess) | |||
1717 | * If the iSCSI Session for the iSCSI Initiator Node exists, | 1693 | * If the iSCSI Session for the iSCSI Initiator Node exists, |
1718 | * forcefully shutdown the iSCSI NEXUS. | 1694 | * forcefully shutdown the iSCSI NEXUS. |
1719 | */ | 1695 | */ |
1720 | iscsit_stop_session(sess, 1, 1); | ||
1721 | iscsit_dec_session_usage_count(sess); | ||
1722 | iscsit_close_session(sess); | 1696 | iscsit_close_session(sess); |
1723 | } | 1697 | } |
1724 | 1698 | ||
1725 | static void lio_tpg_stop_session( | ||
1726 | struct se_session *se_sess, | ||
1727 | int sess_sleep, | ||
1728 | int conn_sleep) | ||
1729 | { | ||
1730 | struct iscsi_session *sess = se_sess->fabric_sess_ptr; | ||
1731 | |||
1732 | iscsit_stop_session(sess, sess_sleep, conn_sleep); | ||
1733 | } | ||
1734 | |||
1735 | static void lio_tpg_fall_back_to_erl0(struct se_session *se_sess) | ||
1736 | { | ||
1737 | struct iscsi_session *sess = se_sess->fabric_sess_ptr; | ||
1738 | |||
1739 | iscsit_fall_back_to_erl0(sess); | ||
1740 | } | ||
1741 | |||
1742 | static u32 lio_tpg_get_inst_index(struct se_portal_group *se_tpg) | 1699 | static u32 lio_tpg_get_inst_index(struct se_portal_group *se_tpg) |
1743 | { | 1700 | { |
1744 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; | 1701 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; |
@@ -1802,9 +1759,6 @@ int iscsi_target_register_configfs(void) | |||
1802 | fabric->tf_ops.release_cmd = &lio_release_cmd; | 1759 | fabric->tf_ops.release_cmd = &lio_release_cmd; |
1803 | fabric->tf_ops.shutdown_session = &lio_tpg_shutdown_session; | 1760 | fabric->tf_ops.shutdown_session = &lio_tpg_shutdown_session; |
1804 | fabric->tf_ops.close_session = &lio_tpg_close_session; | 1761 | fabric->tf_ops.close_session = &lio_tpg_close_session; |
1805 | fabric->tf_ops.stop_session = &lio_tpg_stop_session; | ||
1806 | fabric->tf_ops.fall_back_to_erl0 = &lio_tpg_fall_back_to_erl0; | ||
1807 | fabric->tf_ops.sess_logged_in = &lio_sess_logged_in; | ||
1808 | fabric->tf_ops.sess_get_index = &lio_sess_get_index; | 1762 | fabric->tf_ops.sess_get_index = &lio_sess_get_index; |
1809 | fabric->tf_ops.sess_get_initiator_sid = &lio_sess_get_initiator_sid; | 1763 | fabric->tf_ops.sess_get_initiator_sid = &lio_sess_get_initiator_sid; |
1810 | fabric->tf_ops.write_pending = &lio_write_pending; | 1764 | fabric->tf_ops.write_pending = &lio_write_pending; |
@@ -1818,7 +1772,6 @@ int iscsi_target_register_configfs(void) | |||
1818 | fabric->tf_ops.queue_tm_rsp = &lio_queue_tm_rsp; | 1772 | fabric->tf_ops.queue_tm_rsp = &lio_queue_tm_rsp; |
1819 | fabric->tf_ops.set_fabric_sense_len = &lio_set_fabric_sense_len; | 1773 | fabric->tf_ops.set_fabric_sense_len = &lio_set_fabric_sense_len; |
1820 | fabric->tf_ops.get_fabric_sense_len = &lio_get_fabric_sense_len; | 1774 | fabric->tf_ops.get_fabric_sense_len = &lio_get_fabric_sense_len; |
1821 | fabric->tf_ops.is_state_remove = &iscsi_is_state_remove; | ||
1822 | /* | 1775 | /* |
1823 | * Setup function pointers for generic logic in target_core_fabric_configfs.c | 1776 | * Setup function pointers for generic logic in target_core_fabric_configfs.c |
1824 | */ | 1777 | */ |
diff --git a/drivers/target/iscsi/iscsi_target_core.h b/drivers/target/iscsi/iscsi_target_core.h index 0ec3b77a0c27..2aaee7efa683 100644 --- a/drivers/target/iscsi/iscsi_target_core.h +++ b/drivers/target/iscsi/iscsi_target_core.h | |||
@@ -9,7 +9,7 @@ | |||
9 | #include <scsi/iscsi_proto.h> | 9 | #include <scsi/iscsi_proto.h> |
10 | #include <target/target_core_base.h> | 10 | #include <target/target_core_base.h> |
11 | 11 | ||
12 | #define ISCSIT_VERSION "v4.1.0-rc1" | 12 | #define ISCSIT_VERSION "v4.1.0-rc2" |
13 | #define ISCSI_MAX_DATASN_MISSING_COUNT 16 | 13 | #define ISCSI_MAX_DATASN_MISSING_COUNT 16 |
14 | #define ISCSI_TX_THREAD_TCP_TIMEOUT 2 | 14 | #define ISCSI_TX_THREAD_TCP_TIMEOUT 2 |
15 | #define ISCSI_RX_THREAD_TCP_TIMEOUT 2 | 15 | #define ISCSI_RX_THREAD_TCP_TIMEOUT 2 |
diff --git a/drivers/target/iscsi/iscsi_target_device.c b/drivers/target/iscsi/iscsi_target_device.c index f63ea35bc4ae..bcc409853a67 100644 --- a/drivers/target/iscsi/iscsi_target_device.c +++ b/drivers/target/iscsi/iscsi_target_device.c | |||
@@ -28,25 +28,6 @@ | |||
28 | #include "iscsi_target_tpg.h" | 28 | #include "iscsi_target_tpg.h" |
29 | #include "iscsi_target_util.h" | 29 | #include "iscsi_target_util.h" |
30 | 30 | ||
31 | int iscsit_get_lun_for_tmr( | ||
32 | struct iscsi_cmd *cmd, | ||
33 | u64 lun) | ||
34 | { | ||
35 | u32 unpacked_lun = scsilun_to_int((struct scsi_lun *)&lun); | ||
36 | |||
37 | return transport_lookup_tmr_lun(&cmd->se_cmd, unpacked_lun); | ||
38 | } | ||
39 | |||
40 | int iscsit_get_lun_for_cmd( | ||
41 | struct iscsi_cmd *cmd, | ||
42 | unsigned char *cdb, | ||
43 | u64 lun) | ||
44 | { | ||
45 | u32 unpacked_lun = scsilun_to_int((struct scsi_lun *)&lun); | ||
46 | |||
47 | return transport_lookup_cmd_lun(&cmd->se_cmd, unpacked_lun); | ||
48 | } | ||
49 | |||
50 | void iscsit_determine_maxcmdsn(struct iscsi_session *sess) | 31 | void iscsit_determine_maxcmdsn(struct iscsi_session *sess) |
51 | { | 32 | { |
52 | struct se_node_acl *se_nacl; | 33 | struct se_node_acl *se_nacl; |
diff --git a/drivers/target/iscsi/iscsi_target_device.h b/drivers/target/iscsi/iscsi_target_device.h index bef1cada15f8..a0e2df9e8090 100644 --- a/drivers/target/iscsi/iscsi_target_device.h +++ b/drivers/target/iscsi/iscsi_target_device.h | |||
@@ -1,8 +1,6 @@ | |||
1 | #ifndef ISCSI_TARGET_DEVICE_H | 1 | #ifndef ISCSI_TARGET_DEVICE_H |
2 | #define ISCSI_TARGET_DEVICE_H | 2 | #define ISCSI_TARGET_DEVICE_H |
3 | 3 | ||
4 | extern int iscsit_get_lun_for_tmr(struct iscsi_cmd *, u64); | ||
5 | extern int iscsit_get_lun_for_cmd(struct iscsi_cmd *, unsigned char *, u64); | ||
6 | extern void iscsit_determine_maxcmdsn(struct iscsi_session *); | 4 | extern void iscsit_determine_maxcmdsn(struct iscsi_session *); |
7 | extern void iscsit_increment_maxcmdsn(struct iscsi_cmd *, struct iscsi_session *); | 5 | extern void iscsit_increment_maxcmdsn(struct iscsi_cmd *, struct iscsi_session *); |
8 | 6 | ||
diff --git a/drivers/target/iscsi/iscsi_target_erl0.c b/drivers/target/iscsi/iscsi_target_erl0.c index 478451167b62..1ab0560b0924 100644 --- a/drivers/target/iscsi/iscsi_target_erl0.c +++ b/drivers/target/iscsi/iscsi_target_erl0.c | |||
@@ -783,7 +783,7 @@ static void iscsit_handle_time2retain_timeout(unsigned long data) | |||
783 | } | 783 | } |
784 | 784 | ||
785 | spin_unlock_bh(&se_tpg->session_lock); | 785 | spin_unlock_bh(&se_tpg->session_lock); |
786 | iscsit_close_session(sess); | 786 | target_put_session(sess->se_sess); |
787 | } | 787 | } |
788 | 788 | ||
789 | extern void iscsit_start_time2retain_handler(struct iscsi_session *sess) | 789 | extern void iscsit_start_time2retain_handler(struct iscsi_session *sess) |
diff --git a/drivers/target/iscsi/iscsi_target_erl1.c b/drivers/target/iscsi/iscsi_target_erl1.c index 27901e37c125..006f605edb08 100644 --- a/drivers/target/iscsi/iscsi_target_erl1.c +++ b/drivers/target/iscsi/iscsi_target_erl1.c | |||
@@ -416,7 +416,7 @@ static int iscsit_handle_recovery_datain( | |||
416 | struct iscsi_datain_req *dr; | 416 | struct iscsi_datain_req *dr; |
417 | struct se_cmd *se_cmd = &cmd->se_cmd; | 417 | struct se_cmd *se_cmd = &cmd->se_cmd; |
418 | 418 | ||
419 | if (!atomic_read(&se_cmd->t_transport_complete)) { | 419 | if (!(se_cmd->transport_state & CMD_T_COMPLETE)) { |
420 | pr_err("Ignoring ITT: 0x%08x Data SNACK\n", | 420 | pr_err("Ignoring ITT: 0x%08x Data SNACK\n", |
421 | cmd->init_task_tag); | 421 | cmd->init_task_tag); |
422 | return 0; | 422 | return 0; |
diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c index 1ee33a8c3fab..a3656c9903a1 100644 --- a/drivers/target/iscsi/iscsi_target_login.c +++ b/drivers/target/iscsi/iscsi_target_login.c | |||
@@ -181,14 +181,16 @@ int iscsi_check_for_session_reinstatement(struct iscsi_conn *conn) | |||
181 | if (sess->session_state == TARG_SESS_STATE_FAILED) { | 181 | if (sess->session_state == TARG_SESS_STATE_FAILED) { |
182 | spin_unlock_bh(&sess->conn_lock); | 182 | spin_unlock_bh(&sess->conn_lock); |
183 | iscsit_dec_session_usage_count(sess); | 183 | iscsit_dec_session_usage_count(sess); |
184 | return iscsit_close_session(sess); | 184 | target_put_session(sess->se_sess); |
185 | return 0; | ||
185 | } | 186 | } |
186 | spin_unlock_bh(&sess->conn_lock); | 187 | spin_unlock_bh(&sess->conn_lock); |
187 | 188 | ||
188 | iscsit_stop_session(sess, 1, 1); | 189 | iscsit_stop_session(sess, 1, 1); |
189 | iscsit_dec_session_usage_count(sess); | 190 | iscsit_dec_session_usage_count(sess); |
190 | 191 | ||
191 | return iscsit_close_session(sess); | 192 | target_put_session(sess->se_sess); |
193 | return 0; | ||
192 | } | 194 | } |
193 | 195 | ||
194 | static void iscsi_login_set_conn_values( | 196 | static void iscsi_login_set_conn_values( |
@@ -881,7 +883,7 @@ fail: | |||
881 | static int __iscsi_target_login_thread(struct iscsi_np *np) | 883 | static int __iscsi_target_login_thread(struct iscsi_np *np) |
882 | { | 884 | { |
883 | u8 buffer[ISCSI_HDR_LEN], iscsi_opcode, zero_tsih = 0; | 885 | u8 buffer[ISCSI_HDR_LEN], iscsi_opcode, zero_tsih = 0; |
884 | int err, ret = 0, ip_proto, sock_type, set_sctp_conn_flag, stop; | 886 | int err, ret = 0, set_sctp_conn_flag, stop; |
885 | struct iscsi_conn *conn = NULL; | 887 | struct iscsi_conn *conn = NULL; |
886 | struct iscsi_login *login; | 888 | struct iscsi_login *login; |
887 | struct iscsi_portal_group *tpg = NULL; | 889 | struct iscsi_portal_group *tpg = NULL; |
@@ -894,8 +896,6 @@ static int __iscsi_target_login_thread(struct iscsi_np *np) | |||
894 | flush_signals(current); | 896 | flush_signals(current); |
895 | set_sctp_conn_flag = 0; | 897 | set_sctp_conn_flag = 0; |
896 | sock = np->np_socket; | 898 | sock = np->np_socket; |
897 | ip_proto = np->np_ip_proto; | ||
898 | sock_type = np->np_sock_type; | ||
899 | 899 | ||
900 | spin_lock_bh(&np->np_thread_lock); | 900 | spin_lock_bh(&np->np_thread_lock); |
901 | if (np->np_thread_state == ISCSI_NP_THREAD_RESET) { | 901 | if (np->np_thread_state == ISCSI_NP_THREAD_RESET) { |
diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c index e89fa7457254..2dba448cac19 100644 --- a/drivers/target/iscsi/iscsi_target_nego.c +++ b/drivers/target/iscsi/iscsi_target_nego.c | |||
@@ -90,7 +90,7 @@ int extract_param( | |||
90 | return -1; | 90 | return -1; |
91 | 91 | ||
92 | if (len > max_length) { | 92 | if (len > max_length) { |
93 | pr_err("Length of input: %d exeeds max_length:" | 93 | pr_err("Length of input: %d exceeds max_length:" |
94 | " %d\n", len, max_length); | 94 | " %d\n", len, max_length); |
95 | return -1; | 95 | return -1; |
96 | } | 96 | } |
@@ -173,13 +173,11 @@ static int iscsi_target_check_login_request( | |||
173 | struct iscsi_conn *conn, | 173 | struct iscsi_conn *conn, |
174 | struct iscsi_login *login) | 174 | struct iscsi_login *login) |
175 | { | 175 | { |
176 | int req_csg, req_nsg, rsp_csg, rsp_nsg; | 176 | int req_csg, req_nsg; |
177 | u32 payload_length; | 177 | u32 payload_length; |
178 | struct iscsi_login_req *login_req; | 178 | struct iscsi_login_req *login_req; |
179 | struct iscsi_login_rsp *login_rsp; | ||
180 | 179 | ||
181 | login_req = (struct iscsi_login_req *) login->req; | 180 | login_req = (struct iscsi_login_req *) login->req; |
182 | login_rsp = (struct iscsi_login_rsp *) login->rsp; | ||
183 | payload_length = ntoh24(login_req->dlength); | 181 | payload_length = ntoh24(login_req->dlength); |
184 | 182 | ||
185 | switch (login_req->opcode & ISCSI_OPCODE_MASK) { | 183 | switch (login_req->opcode & ISCSI_OPCODE_MASK) { |
@@ -203,9 +201,7 @@ static int iscsi_target_check_login_request( | |||
203 | } | 201 | } |
204 | 202 | ||
205 | req_csg = (login_req->flags & ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK) >> 2; | 203 | req_csg = (login_req->flags & ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK) >> 2; |
206 | rsp_csg = (login_rsp->flags & ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK) >> 2; | ||
207 | req_nsg = (login_req->flags & ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK); | 204 | req_nsg = (login_req->flags & ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK); |
208 | rsp_nsg = (login_rsp->flags & ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK); | ||
209 | 205 | ||
210 | if (req_csg != login->current_stage) { | 206 | if (req_csg != login->current_stage) { |
211 | pr_err("Initiator unexpectedly changed login stage" | 207 | pr_err("Initiator unexpectedly changed login stage" |
@@ -753,12 +749,10 @@ static int iscsi_target_locate_portal( | |||
753 | struct iscsi_session *sess = conn->sess; | 749 | struct iscsi_session *sess = conn->sess; |
754 | struct iscsi_tiqn *tiqn; | 750 | struct iscsi_tiqn *tiqn; |
755 | struct iscsi_login_req *login_req; | 751 | struct iscsi_login_req *login_req; |
756 | struct iscsi_targ_login_rsp *login_rsp; | ||
757 | u32 payload_length; | 752 | u32 payload_length; |
758 | int sessiontype = 0, ret = 0; | 753 | int sessiontype = 0, ret = 0; |
759 | 754 | ||
760 | login_req = (struct iscsi_login_req *) login->req; | 755 | login_req = (struct iscsi_login_req *) login->req; |
761 | login_rsp = (struct iscsi_targ_login_rsp *) login->rsp; | ||
762 | payload_length = ntoh24(login_req->dlength); | 756 | payload_length = ntoh24(login_req->dlength); |
763 | 757 | ||
764 | login->first_request = 1; | 758 | login->first_request = 1; |
diff --git a/drivers/target/iscsi/iscsi_target_nodeattrib.c b/drivers/target/iscsi/iscsi_target_nodeattrib.c index b3c699c4fe8c..11dc2936af76 100644 --- a/drivers/target/iscsi/iscsi_target_nodeattrib.c +++ b/drivers/target/iscsi/iscsi_target_nodeattrib.c | |||
@@ -49,7 +49,7 @@ void iscsit_set_default_node_attribues( | |||
49 | a->default_erl = NA_DEFAULT_ERL; | 49 | a->default_erl = NA_DEFAULT_ERL; |
50 | } | 50 | } |
51 | 51 | ||
52 | extern int iscsit_na_dataout_timeout( | 52 | int iscsit_na_dataout_timeout( |
53 | struct iscsi_node_acl *acl, | 53 | struct iscsi_node_acl *acl, |
54 | u32 dataout_timeout) | 54 | u32 dataout_timeout) |
55 | { | 55 | { |
@@ -74,7 +74,7 @@ extern int iscsit_na_dataout_timeout( | |||
74 | return 0; | 74 | return 0; |
75 | } | 75 | } |
76 | 76 | ||
77 | extern int iscsit_na_dataout_timeout_retries( | 77 | int iscsit_na_dataout_timeout_retries( |
78 | struct iscsi_node_acl *acl, | 78 | struct iscsi_node_acl *acl, |
79 | u32 dataout_timeout_retries) | 79 | u32 dataout_timeout_retries) |
80 | { | 80 | { |
@@ -100,7 +100,7 @@ extern int iscsit_na_dataout_timeout_retries( | |||
100 | return 0; | 100 | return 0; |
101 | } | 101 | } |
102 | 102 | ||
103 | extern int iscsit_na_nopin_timeout( | 103 | int iscsit_na_nopin_timeout( |
104 | struct iscsi_node_acl *acl, | 104 | struct iscsi_node_acl *acl, |
105 | u32 nopin_timeout) | 105 | u32 nopin_timeout) |
106 | { | 106 | { |
@@ -155,7 +155,7 @@ extern int iscsit_na_nopin_timeout( | |||
155 | return 0; | 155 | return 0; |
156 | } | 156 | } |
157 | 157 | ||
158 | extern int iscsit_na_nopin_response_timeout( | 158 | int iscsit_na_nopin_response_timeout( |
159 | struct iscsi_node_acl *acl, | 159 | struct iscsi_node_acl *acl, |
160 | u32 nopin_response_timeout) | 160 | u32 nopin_response_timeout) |
161 | { | 161 | { |
@@ -181,7 +181,7 @@ extern int iscsit_na_nopin_response_timeout( | |||
181 | return 0; | 181 | return 0; |
182 | } | 182 | } |
183 | 183 | ||
184 | extern int iscsit_na_random_datain_pdu_offsets( | 184 | int iscsit_na_random_datain_pdu_offsets( |
185 | struct iscsi_node_acl *acl, | 185 | struct iscsi_node_acl *acl, |
186 | u32 random_datain_pdu_offsets) | 186 | u32 random_datain_pdu_offsets) |
187 | { | 187 | { |
@@ -201,7 +201,7 @@ extern int iscsit_na_random_datain_pdu_offsets( | |||
201 | return 0; | 201 | return 0; |
202 | } | 202 | } |
203 | 203 | ||
204 | extern int iscsit_na_random_datain_seq_offsets( | 204 | int iscsit_na_random_datain_seq_offsets( |
205 | struct iscsi_node_acl *acl, | 205 | struct iscsi_node_acl *acl, |
206 | u32 random_datain_seq_offsets) | 206 | u32 random_datain_seq_offsets) |
207 | { | 207 | { |
@@ -221,7 +221,7 @@ extern int iscsit_na_random_datain_seq_offsets( | |||
221 | return 0; | 221 | return 0; |
222 | } | 222 | } |
223 | 223 | ||
224 | extern int iscsit_na_random_r2t_offsets( | 224 | int iscsit_na_random_r2t_offsets( |
225 | struct iscsi_node_acl *acl, | 225 | struct iscsi_node_acl *acl, |
226 | u32 random_r2t_offsets) | 226 | u32 random_r2t_offsets) |
227 | { | 227 | { |
@@ -241,7 +241,7 @@ extern int iscsit_na_random_r2t_offsets( | |||
241 | return 0; | 241 | return 0; |
242 | } | 242 | } |
243 | 243 | ||
244 | extern int iscsit_na_default_erl( | 244 | int iscsit_na_default_erl( |
245 | struct iscsi_node_acl *acl, | 245 | struct iscsi_node_acl *acl, |
246 | u32 default_erl) | 246 | u32 default_erl) |
247 | { | 247 | { |
diff --git a/drivers/target/iscsi/iscsi_target_parameters.c b/drivers/target/iscsi/iscsi_target_parameters.c index 5b773160200f..eb05c9d751ea 100644 --- a/drivers/target/iscsi/iscsi_target_parameters.c +++ b/drivers/target/iscsi/iscsi_target_parameters.c | |||
@@ -874,8 +874,8 @@ static int iscsi_check_numerical_value(struct iscsi_param *param, char *value_pt | |||
874 | static int iscsi_check_numerical_range_value(struct iscsi_param *param, char *value) | 874 | static int iscsi_check_numerical_range_value(struct iscsi_param *param, char *value) |
875 | { | 875 | { |
876 | char *left_val_ptr = NULL, *right_val_ptr = NULL; | 876 | char *left_val_ptr = NULL, *right_val_ptr = NULL; |
877 | char *tilde_ptr = NULL, *tmp_ptr = NULL; | 877 | char *tilde_ptr = NULL; |
878 | u32 left_val, right_val, local_left_val, local_right_val; | 878 | u32 left_val, right_val, local_left_val; |
879 | 879 | ||
880 | if (strcmp(param->name, IFMARKINT) && | 880 | if (strcmp(param->name, IFMARKINT) && |
881 | strcmp(param->name, OFMARKINT)) { | 881 | strcmp(param->name, OFMARKINT)) { |
@@ -903,8 +903,8 @@ static int iscsi_check_numerical_range_value(struct iscsi_param *param, char *va | |||
903 | if (iscsi_check_numerical_value(param, right_val_ptr) < 0) | 903 | if (iscsi_check_numerical_value(param, right_val_ptr) < 0) |
904 | return -1; | 904 | return -1; |
905 | 905 | ||
906 | left_val = simple_strtoul(left_val_ptr, &tmp_ptr, 0); | 906 | left_val = simple_strtoul(left_val_ptr, NULL, 0); |
907 | right_val = simple_strtoul(right_val_ptr, &tmp_ptr, 0); | 907 | right_val = simple_strtoul(right_val_ptr, NULL, 0); |
908 | *tilde_ptr = '~'; | 908 | *tilde_ptr = '~'; |
909 | 909 | ||
910 | if (right_val < left_val) { | 910 | if (right_val < left_val) { |
@@ -928,8 +928,7 @@ static int iscsi_check_numerical_range_value(struct iscsi_param *param, char *va | |||
928 | left_val_ptr = param->value; | 928 | left_val_ptr = param->value; |
929 | right_val_ptr = param->value + strlen(left_val_ptr) + 1; | 929 | right_val_ptr = param->value + strlen(left_val_ptr) + 1; |
930 | 930 | ||
931 | local_left_val = simple_strtoul(left_val_ptr, &tmp_ptr, 0); | 931 | local_left_val = simple_strtoul(left_val_ptr, NULL, 0); |
932 | local_right_val = simple_strtoul(right_val_ptr, &tmp_ptr, 0); | ||
933 | *tilde_ptr = '~'; | 932 | *tilde_ptr = '~'; |
934 | 933 | ||
935 | if (param->set_param) { | 934 | if (param->set_param) { |
@@ -1189,7 +1188,7 @@ static int iscsi_check_proposer_state(struct iscsi_param *param, char *value) | |||
1189 | if (IS_TYPE_NUMBER_RANGE(param)) { | 1188 | if (IS_TYPE_NUMBER_RANGE(param)) { |
1190 | u32 left_val = 0, right_val = 0, recieved_value = 0; | 1189 | u32 left_val = 0, right_val = 0, recieved_value = 0; |
1191 | char *left_val_ptr = NULL, *right_val_ptr = NULL; | 1190 | char *left_val_ptr = NULL, *right_val_ptr = NULL; |
1192 | char *tilde_ptr = NULL, *tmp_ptr = NULL; | 1191 | char *tilde_ptr = NULL; |
1193 | 1192 | ||
1194 | if (!strcmp(value, IRRELEVANT) || !strcmp(value, REJECT)) { | 1193 | if (!strcmp(value, IRRELEVANT) || !strcmp(value, REJECT)) { |
1195 | if (iscsi_update_param_value(param, value) < 0) | 1194 | if (iscsi_update_param_value(param, value) < 0) |
@@ -1213,9 +1212,9 @@ static int iscsi_check_proposer_state(struct iscsi_param *param, char *value) | |||
1213 | 1212 | ||
1214 | left_val_ptr = param->value; | 1213 | left_val_ptr = param->value; |
1215 | right_val_ptr = param->value + strlen(left_val_ptr) + 1; | 1214 | right_val_ptr = param->value + strlen(left_val_ptr) + 1; |
1216 | left_val = simple_strtoul(left_val_ptr, &tmp_ptr, 0); | 1215 | left_val = simple_strtoul(left_val_ptr, NULL, 0); |
1217 | right_val = simple_strtoul(right_val_ptr, &tmp_ptr, 0); | 1216 | right_val = simple_strtoul(right_val_ptr, NULL, 0); |
1218 | recieved_value = simple_strtoul(value, &tmp_ptr, 0); | 1217 | recieved_value = simple_strtoul(value, NULL, 0); |
1219 | 1218 | ||
1220 | *tilde_ptr = '~'; | 1219 | *tilde_ptr = '~'; |
1221 | 1220 | ||
diff --git a/drivers/target/iscsi/iscsi_target_tmr.c b/drivers/target/iscsi/iscsi_target_tmr.c index 255ed35da815..e01da9d2b37e 100644 --- a/drivers/target/iscsi/iscsi_target_tmr.c +++ b/drivers/target/iscsi/iscsi_target_tmr.c | |||
@@ -250,7 +250,7 @@ static int iscsit_task_reassign_complete_write( | |||
250 | * so if we have received all DataOUT we can safety ignore Initiator. | 250 | * so if we have received all DataOUT we can safety ignore Initiator. |
251 | */ | 251 | */ |
252 | if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT) { | 252 | if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT) { |
253 | if (!atomic_read(&cmd->se_cmd.t_transport_sent)) { | 253 | if (!(cmd->se_cmd.transport_state & CMD_T_SENT)) { |
254 | pr_debug("WRITE ITT: 0x%08x: t_state: %d" | 254 | pr_debug("WRITE ITT: 0x%08x: t_state: %d" |
255 | " never sent to transport\n", | 255 | " never sent to transport\n", |
256 | cmd->init_task_tag, cmd->se_cmd.t_state); | 256 | cmd->init_task_tag, cmd->se_cmd.t_state); |
@@ -314,7 +314,7 @@ static int iscsit_task_reassign_complete_read( | |||
314 | cmd->acked_data_sn = (tmr_req->exp_data_sn - 1); | 314 | cmd->acked_data_sn = (tmr_req->exp_data_sn - 1); |
315 | } | 315 | } |
316 | 316 | ||
317 | if (!atomic_read(&cmd->se_cmd.t_transport_sent)) { | 317 | if (!(cmd->se_cmd.transport_state & CMD_T_SENT)) { |
318 | pr_debug("READ ITT: 0x%08x: t_state: %d never sent to" | 318 | pr_debug("READ ITT: 0x%08x: t_state: %d never sent to" |
319 | " transport\n", cmd->init_task_tag, | 319 | " transport\n", cmd->init_task_tag, |
320 | cmd->se_cmd.t_state); | 320 | cmd->se_cmd.t_state); |
@@ -322,7 +322,7 @@ static int iscsit_task_reassign_complete_read( | |||
322 | return 0; | 322 | return 0; |
323 | } | 323 | } |
324 | 324 | ||
325 | if (!atomic_read(&se_cmd->t_transport_complete)) { | 325 | if (!(se_cmd->transport_state & CMD_T_COMPLETE)) { |
326 | pr_err("READ ITT: 0x%08x: t_state: %d, never returned" | 326 | pr_err("READ ITT: 0x%08x: t_state: %d, never returned" |
327 | " from transport\n", cmd->init_task_tag, | 327 | " from transport\n", cmd->init_task_tag, |
328 | cmd->se_cmd.t_state); | 328 | cmd->se_cmd.t_state); |
diff --git a/drivers/target/iscsi/iscsi_target_tq.c b/drivers/target/iscsi/iscsi_target_tq.c index 0baac5bcebd4..977e1cf90e83 100644 --- a/drivers/target/iscsi/iscsi_target_tq.c +++ b/drivers/target/iscsi/iscsi_target_tq.c | |||
@@ -536,12 +536,6 @@ int iscsi_thread_set_init(void) | |||
536 | return -ENOMEM; | 536 | return -ENOMEM; |
537 | } | 537 | } |
538 | 538 | ||
539 | spin_lock_init(&active_ts_lock); | ||
540 | spin_lock_init(&inactive_ts_lock); | ||
541 | spin_lock_init(&ts_bitmap_lock); | ||
542 | INIT_LIST_HEAD(&active_ts_list); | ||
543 | INIT_LIST_HEAD(&inactive_ts_list); | ||
544 | |||
545 | return 0; | 539 | return 0; |
546 | } | 540 | } |
547 | 541 | ||
diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c index 11287e1ece13..4eba86d2bd82 100644 --- a/drivers/target/iscsi/iscsi_target_util.c +++ b/drivers/target/iscsi/iscsi_target_util.c | |||
@@ -229,6 +229,7 @@ struct iscsi_cmd *iscsit_allocate_se_cmd_for_tmr( | |||
229 | { | 229 | { |
230 | struct iscsi_cmd *cmd; | 230 | struct iscsi_cmd *cmd; |
231 | struct se_cmd *se_cmd; | 231 | struct se_cmd *se_cmd; |
232 | int rc; | ||
232 | u8 tcm_function; | 233 | u8 tcm_function; |
233 | 234 | ||
234 | cmd = iscsit_allocate_cmd(conn, GFP_KERNEL); | 235 | cmd = iscsit_allocate_cmd(conn, GFP_KERNEL); |
@@ -286,10 +287,8 @@ struct iscsi_cmd *iscsit_allocate_se_cmd_for_tmr( | |||
286 | goto out; | 287 | goto out; |
287 | } | 288 | } |
288 | 289 | ||
289 | se_cmd->se_tmr_req = core_tmr_alloc_req(se_cmd, | 290 | rc = core_tmr_alloc_req(se_cmd, cmd->tmr_req, tcm_function, GFP_KERNEL); |
290 | cmd->tmr_req, tcm_function, | 291 | if (rc < 0) |
291 | GFP_KERNEL); | ||
292 | if (!se_cmd->se_tmr_req) | ||
293 | goto out; | 292 | goto out; |
294 | 293 | ||
295 | cmd->tmr_req->se_tmr_req = se_cmd->se_tmr_req; | 294 | cmd->tmr_req->se_tmr_req = se_cmd->se_tmr_req; |