aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/iscsi/iscsi_target_configfs.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-10-10 06:52:19 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-10 06:52:19 -0400
commita188e7e93a36627fb3f0013f41857ab54f076d04 (patch)
tree7686a0e870decdab3971db709fb0edf04241c07e /drivers/target/iscsi/iscsi_target_configfs.c
parente1b28147f684af67bfac989756c27c19859d3d4e (diff)
parentcf0eb28d3ba60098865bf7dbcbfdd6b1cc483e3b (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: "Things have been calm for the most part with no new fabric drivers in flight for v3.7 (we're up to eight now !), so this update is primarily focused on addressing a few long-standing items within target-core and iscsi-target fabric code. The highlights include: - target: Simplify fabric sense data length handling (roland) - qla2xxx: Fix endianness of task management response code (roland) - target: fix truncation of mode data, support zero allocation length (paolo) - target: Properly support zero-length commands in normal processing path (paolo) - iscsi-target: Correctly set 0xffffffff field within ISCSI_OP_REJECT PDU (ronnie + nab) - iscsi-target: Add explicit set of cache_dynamic_acls=1 for TPG demo-mode (ronnie + nab) - target/file: Re-enable optional fd_buffered_io=1 operation (nab + hch) - iscsi-target: Add MaxXmitDataSegmenthLength forr target -> initiator MDRSL declaration (nab) - target: Add target_submit_cmd_map_sgls for SGL fabric memory passthrough (nab + hch) - tcm_loop: Convert I/O path to use target_submit_cmd_map_sgls (hch + nab) - tcm_vhost: Convert I/O path to use target_submit_cmd_map_sgls (nab + hch) The last series for adding a new target_submit_cmd_map_sgls() fabric caller (as requested by hch) that accepts pre-allocated SGL memory (using existing logic), along with converting tcm_loop + tcm_vhost has only been in -next for the last days, but has gotten enough review +testing and is clear enough a mechanical change that I think it's reasonable to merge for -rc1 code. Thanks again to everyone who contributed this round! Extra special thanks to Roland (PureStorage) for tracking down the qla2xxx target TMR response code endian issue, and to Paolo (Redhat) for resolving the long standing zero-length CDB issues within target-core between virtual and pSCSI backends." * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (44 commits) iscsi-target: Bump defaults for nopin_timeout + nopin_response_timeout values iscsit: proper endianess conversions iscsit: use the itt_t abstract type iscsit: add missing endianess conversion in iscsit_check_inaddr_any iscsit: remove incorrect unlock in iscsit_build_sendtargets_resp iscsit: mark various functions static target/iscsi: precedence bug in iscsit_set_dataout_sequence_values() target/usb-gadget: strlen() doesn't count the terminator target/usb-gadget: remove duplicate initialization tcm_vhost: Convert I/O path to use target_submit_cmd_map_sgls target: Add control CDB READ payload zero work-around tcm_loop: Convert I/O path to use target_submit_cmd_map_sgls target: Add target_submit_cmd_map_sgls for SGL fabric memory passthrough iscsi-target: Add explicit set of cache_dynamic_acls=1 for TPG demo-mode iscsi-target: Change iscsi_target_seq_pdu_list.c to honor MaxXmitDataSegmentLength iscsi-target: Add MaxXmitDataSegmentLength connection recovery check iscsi-target: Convert incoming PDU payload checks to MaxXmitDataSegmentLength iscsi-target: Enable MaxXmitDataSegmentLength operation in login path iscsi-target: Add base MaxXmitDataSegmentLength code target/file: Re-enable optional fd_buffered_io=1 operation ...
Diffstat (limited to 'drivers/target/iscsi/iscsi_target_configfs.c')
-rw-r--r--drivers/target/iscsi/iscsi_target_configfs.c42
1 files changed, 11 insertions, 31 deletions
diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c
index a7b25e783b58..ff6fd4fb624d 100644
--- a/drivers/target/iscsi/iscsi_target_configfs.c
+++ b/drivers/target/iscsi/iscsi_target_configfs.c
@@ -135,7 +135,7 @@ static struct configfs_attribute *lio_target_portal_attrs[] = {
135 135
136#define MAX_PORTAL_LEN 256 136#define MAX_PORTAL_LEN 256
137 137
138struct se_tpg_np *lio_target_call_addnptotpg( 138static struct se_tpg_np *lio_target_call_addnptotpg(
139 struct se_portal_group *se_tpg, 139 struct se_portal_group *se_tpg,
140 struct config_group *group, 140 struct config_group *group,
141 const char *name) 141 const char *name)
@@ -1034,6 +1034,9 @@ TPG_PARAM_ATTR(ImmediateData, S_IRUGO | S_IWUSR);
1034DEF_TPG_PARAM(MaxRecvDataSegmentLength); 1034DEF_TPG_PARAM(MaxRecvDataSegmentLength);
1035TPG_PARAM_ATTR(MaxRecvDataSegmentLength, S_IRUGO | S_IWUSR); 1035TPG_PARAM_ATTR(MaxRecvDataSegmentLength, S_IRUGO | S_IWUSR);
1036 1036
1037DEF_TPG_PARAM(MaxXmitDataSegmentLength);
1038TPG_PARAM_ATTR(MaxXmitDataSegmentLength, S_IRUGO | S_IWUSR);
1039
1037DEF_TPG_PARAM(MaxBurstLength); 1040DEF_TPG_PARAM(MaxBurstLength);
1038TPG_PARAM_ATTR(MaxBurstLength, S_IRUGO | S_IWUSR); 1041TPG_PARAM_ATTR(MaxBurstLength, S_IRUGO | S_IWUSR);
1039 1042
@@ -1079,6 +1082,7 @@ static struct configfs_attribute *lio_target_tpg_param_attrs[] = {
1079 &iscsi_tpg_param_InitialR2T.attr, 1082 &iscsi_tpg_param_InitialR2T.attr,
1080 &iscsi_tpg_param_ImmediateData.attr, 1083 &iscsi_tpg_param_ImmediateData.attr,
1081 &iscsi_tpg_param_MaxRecvDataSegmentLength.attr, 1084 &iscsi_tpg_param_MaxRecvDataSegmentLength.attr,
1085 &iscsi_tpg_param_MaxXmitDataSegmentLength.attr,
1082 &iscsi_tpg_param_MaxBurstLength.attr, 1086 &iscsi_tpg_param_MaxBurstLength.attr,
1083 &iscsi_tpg_param_FirstBurstLength.attr, 1087 &iscsi_tpg_param_FirstBurstLength.attr,
1084 &iscsi_tpg_param_DefaultTime2Wait.attr, 1088 &iscsi_tpg_param_DefaultTime2Wait.attr,
@@ -1166,7 +1170,7 @@ static struct configfs_attribute *lio_target_tpg_attrs[] = {
1166 1170
1167/* Start items for lio_target_tiqn_cit */ 1171/* Start items for lio_target_tiqn_cit */
1168 1172
1169struct se_portal_group *lio_target_tiqn_addtpg( 1173static struct se_portal_group *lio_target_tiqn_addtpg(
1170 struct se_wwn *wwn, 1174 struct se_wwn *wwn,
1171 struct config_group *group, 1175 struct config_group *group,
1172 const char *name) 1176 const char *name)
@@ -1216,7 +1220,7 @@ out:
1216 return NULL; 1220 return NULL;
1217} 1221}
1218 1222
1219void lio_target_tiqn_deltpg(struct se_portal_group *se_tpg) 1223static void lio_target_tiqn_deltpg(struct se_portal_group *se_tpg)
1220{ 1224{
1221 struct iscsi_portal_group *tpg; 1225 struct iscsi_portal_group *tpg;
1222 struct iscsi_tiqn *tiqn; 1226 struct iscsi_tiqn *tiqn;
@@ -1248,7 +1252,7 @@ static struct configfs_attribute *lio_target_wwn_attrs[] = {
1248 NULL, 1252 NULL,
1249}; 1253};
1250 1254
1251struct se_wwn *lio_target_call_coreaddtiqn( 1255static struct se_wwn *lio_target_call_coreaddtiqn(
1252 struct target_fabric_configfs *tf, 1256 struct target_fabric_configfs *tf,
1253 struct config_group *group, 1257 struct config_group *group,
1254 const char *name) 1258 const char *name)
@@ -1296,7 +1300,7 @@ struct se_wwn *lio_target_call_coreaddtiqn(
1296 return &tiqn->tiqn_wwn; 1300 return &tiqn->tiqn_wwn;
1297} 1301}
1298 1302
1299void lio_target_call_coredeltiqn( 1303static void lio_target_call_coredeltiqn(
1300 struct se_wwn *wwn) 1304 struct se_wwn *wwn)
1301{ 1305{
1302 struct iscsi_tiqn *tiqn = container_of(wwn, struct iscsi_tiqn, tiqn_wwn); 1306 struct iscsi_tiqn *tiqn = container_of(wwn, struct iscsi_tiqn, tiqn_wwn);
@@ -1471,7 +1475,8 @@ static u32 iscsi_get_task_tag(struct se_cmd *se_cmd)
1471{ 1475{
1472 struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd); 1476 struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd);
1473 1477
1474 return cmd->init_task_tag; 1478 /* only used for printks or comparism with ->ref_task_tag */
1479 return (__force u32)cmd->init_task_tag;
1475} 1480}
1476 1481
1477static int iscsi_get_cmd_state(struct se_cmd *se_cmd) 1482static int iscsi_get_cmd_state(struct se_cmd *se_cmd)
@@ -1542,29 +1547,6 @@ static int lio_queue_status(struct se_cmd *se_cmd)
1542 return 0; 1547 return 0;
1543} 1548}
1544 1549
1545static u16 lio_set_fabric_sense_len(struct se_cmd *se_cmd, u32 sense_length)
1546{
1547 unsigned char *buffer = se_cmd->sense_buffer;
1548 /*
1549 * From RFC-3720 10.4.7. Data Segment - Sense and Response Data Segment
1550 * 16-bit SenseLength.
1551 */
1552 buffer[0] = ((sense_length >> 8) & 0xff);
1553 buffer[1] = (sense_length & 0xff);
1554 /*
1555 * Return two byte offset into allocated sense_buffer.
1556 */
1557 return 2;
1558}
1559
1560static u16 lio_get_fabric_sense_len(void)
1561{
1562 /*
1563 * Return two byte offset into allocated sense_buffer.
1564 */
1565 return 2;
1566}
1567
1568static int lio_queue_tm_rsp(struct se_cmd *se_cmd) 1550static int lio_queue_tm_rsp(struct se_cmd *se_cmd)
1569{ 1551{
1570 struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd); 1552 struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd);
@@ -1748,8 +1730,6 @@ int iscsi_target_register_configfs(void)
1748 fabric->tf_ops.queue_data_in = &lio_queue_data_in; 1730 fabric->tf_ops.queue_data_in = &lio_queue_data_in;
1749 fabric->tf_ops.queue_status = &lio_queue_status; 1731 fabric->tf_ops.queue_status = &lio_queue_status;
1750 fabric->tf_ops.queue_tm_rsp = &lio_queue_tm_rsp; 1732 fabric->tf_ops.queue_tm_rsp = &lio_queue_tm_rsp;
1751 fabric->tf_ops.set_fabric_sense_len = &lio_set_fabric_sense_len;
1752 fabric->tf_ops.get_fabric_sense_len = &lio_get_fabric_sense_len;
1753 /* 1733 /*
1754 * Setup function pointers for generic logic in target_core_fabric_configfs.c 1734 * Setup function pointers for generic logic in target_core_fabric_configfs.c
1755 */ 1735 */