diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/target/iscsi/iscsi_target_configfs.c | 4 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_core.h | 1 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_parameters.c | 21 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_parameters.h | 5 |
4 files changed, 31 insertions, 0 deletions
diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c index f86833fcf33c..f491f969ab95 100644 --- a/drivers/target/iscsi/iscsi_target_configfs.c +++ b/drivers/target/iscsi/iscsi_target_configfs.c | |||
@@ -1034,6 +1034,9 @@ TPG_PARAM_ATTR(ImmediateData, S_IRUGO | S_IWUSR); | |||
1034 | DEF_TPG_PARAM(MaxRecvDataSegmentLength); | 1034 | DEF_TPG_PARAM(MaxRecvDataSegmentLength); |
1035 | TPG_PARAM_ATTR(MaxRecvDataSegmentLength, S_IRUGO | S_IWUSR); | 1035 | TPG_PARAM_ATTR(MaxRecvDataSegmentLength, S_IRUGO | S_IWUSR); |
1036 | 1036 | ||
1037 | DEF_TPG_PARAM(MaxXmitDataSegmentLength); | ||
1038 | TPG_PARAM_ATTR(MaxXmitDataSegmentLength, S_IRUGO | S_IWUSR); | ||
1039 | |||
1037 | DEF_TPG_PARAM(MaxBurstLength); | 1040 | DEF_TPG_PARAM(MaxBurstLength); |
1038 | TPG_PARAM_ATTR(MaxBurstLength, S_IRUGO | S_IWUSR); | 1041 | TPG_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, |
diff --git a/drivers/target/iscsi/iscsi_target_core.h b/drivers/target/iscsi/iscsi_target_core.h index 8a908b28d8b2..b26611aa5ff3 100644 --- a/drivers/target/iscsi/iscsi_target_core.h +++ b/drivers/target/iscsi/iscsi_target_core.h | |||
@@ -239,6 +239,7 @@ struct iscsi_conn_ops { | |||
239 | u8 HeaderDigest; /* [0,1] == [None,CRC32C] */ | 239 | u8 HeaderDigest; /* [0,1] == [None,CRC32C] */ |
240 | u8 DataDigest; /* [0,1] == [None,CRC32C] */ | 240 | u8 DataDigest; /* [0,1] == [None,CRC32C] */ |
241 | u32 MaxRecvDataSegmentLength; /* [512..2**24-1] */ | 241 | u32 MaxRecvDataSegmentLength; /* [512..2**24-1] */ |
242 | u32 MaxXmitDataSegmentLength; /* [512..2**24-1] */ | ||
242 | u8 OFMarker; /* [0,1] == [No,Yes] */ | 243 | u8 OFMarker; /* [0,1] == [No,Yes] */ |
243 | u8 IFMarker; /* [0,1] == [No,Yes] */ | 244 | u8 IFMarker; /* [0,1] == [No,Yes] */ |
244 | u32 OFMarkInt; /* [1..65535] */ | 245 | u32 OFMarkInt; /* [1..65535] */ |
diff --git a/drivers/target/iscsi/iscsi_target_parameters.c b/drivers/target/iscsi/iscsi_target_parameters.c index 0c4760fabfc0..40864ee70302 100644 --- a/drivers/target/iscsi/iscsi_target_parameters.c +++ b/drivers/target/iscsi/iscsi_target_parameters.c | |||
@@ -334,6 +334,13 @@ int iscsi_create_default_params(struct iscsi_param_list **param_list_ptr) | |||
334 | if (!param) | 334 | if (!param) |
335 | goto out; | 335 | goto out; |
336 | 336 | ||
337 | param = iscsi_set_default_param(pl, MAXXMITDATASEGMENTLENGTH, | ||
338 | INITIAL_MAXXMITDATASEGMENTLENGTH, | ||
339 | PHASE_OPERATIONAL, SCOPE_CONNECTION_ONLY, SENDER_BOTH, | ||
340 | TYPERANGE_512_TO_16777215, USE_ALL); | ||
341 | if (!param) | ||
342 | goto out; | ||
343 | |||
337 | param = iscsi_set_default_param(pl, MAXRECVDATASEGMENTLENGTH, | 344 | param = iscsi_set_default_param(pl, MAXRECVDATASEGMENTLENGTH, |
338 | INITIAL_MAXRECVDATASEGMENTLENGTH, | 345 | INITIAL_MAXRECVDATASEGMENTLENGTH, |
339 | PHASE_OPERATIONAL, SCOPE_CONNECTION_ONLY, SENDER_BOTH, | 346 | PHASE_OPERATIONAL, SCOPE_CONNECTION_ONLY, SENDER_BOTH, |
@@ -467,6 +474,8 @@ int iscsi_set_keys_to_negotiate( | |||
467 | SET_PSTATE_NEGOTIATE(param); | 474 | SET_PSTATE_NEGOTIATE(param); |
468 | } else if (!strcmp(param->name, MAXRECVDATASEGMENTLENGTH)) { | 475 | } else if (!strcmp(param->name, MAXRECVDATASEGMENTLENGTH)) { |
469 | SET_PSTATE_NEGOTIATE(param); | 476 | SET_PSTATE_NEGOTIATE(param); |
477 | } else if (!strcmp(param->name, MAXXMITDATASEGMENTLENGTH)) { | ||
478 | continue; | ||
470 | } else if (!strcmp(param->name, MAXBURSTLENGTH)) { | 479 | } else if (!strcmp(param->name, MAXBURSTLENGTH)) { |
471 | SET_PSTATE_NEGOTIATE(param); | 480 | SET_PSTATE_NEGOTIATE(param); |
472 | } else if (!strcmp(param->name, FIRSTBURSTLENGTH)) { | 481 | } else if (!strcmp(param->name, FIRSTBURSTLENGTH)) { |
@@ -1720,6 +1729,18 @@ void iscsi_set_connection_parameters( | |||
1720 | pr_debug("---------------------------------------------------" | 1729 | pr_debug("---------------------------------------------------" |
1721 | "---------------\n"); | 1730 | "---------------\n"); |
1722 | list_for_each_entry(param, ¶m_list->param_list, p_list) { | 1731 | list_for_each_entry(param, ¶m_list->param_list, p_list) { |
1732 | /* | ||
1733 | * Special case to set MAXXMITDATASEGMENTLENGTH from the | ||
1734 | * target requested MaxRecvDataSegmentLength, even though | ||
1735 | * this key is not sent over the wire. | ||
1736 | */ | ||
1737 | if (!strcmp(param->name, MAXXMITDATASEGMENTLENGTH)) { | ||
1738 | ops->MaxXmitDataSegmentLength = | ||
1739 | simple_strtoul(param->value, &tmpptr, 0); | ||
1740 | pr_debug("MaxXmitDataSegmentLength: %s\n", | ||
1741 | param->value); | ||
1742 | } | ||
1743 | |||
1723 | if (!IS_PSTATE_ACCEPTOR(param) && !IS_PSTATE_PROPOSER(param)) | 1744 | if (!IS_PSTATE_ACCEPTOR(param) && !IS_PSTATE_PROPOSER(param)) |
1724 | continue; | 1745 | continue; |
1725 | if (!strcmp(param->name, AUTHMETHOD)) { | 1746 | if (!strcmp(param->name, AUTHMETHOD)) { |
diff --git a/drivers/target/iscsi/iscsi_target_parameters.h b/drivers/target/iscsi/iscsi_target_parameters.h index 6a37fd6f1285..77a28b589d56 100644 --- a/drivers/target/iscsi/iscsi_target_parameters.h +++ b/drivers/target/iscsi/iscsi_target_parameters.h | |||
@@ -70,6 +70,7 @@ extern void iscsi_set_session_parameters(struct iscsi_sess_ops *, | |||
70 | #define INITIALR2T "InitialR2T" | 70 | #define INITIALR2T "InitialR2T" |
71 | #define IMMEDIATEDATA "ImmediateData" | 71 | #define IMMEDIATEDATA "ImmediateData" |
72 | #define MAXRECVDATASEGMENTLENGTH "MaxRecvDataSegmentLength" | 72 | #define MAXRECVDATASEGMENTLENGTH "MaxRecvDataSegmentLength" |
73 | #define MAXXMITDATASEGMENTLENGTH "MaxXmitDataSegmentLength" | ||
73 | #define MAXBURSTLENGTH "MaxBurstLength" | 74 | #define MAXBURSTLENGTH "MaxBurstLength" |
74 | #define FIRSTBURSTLENGTH "FirstBurstLength" | 75 | #define FIRSTBURSTLENGTH "FirstBurstLength" |
75 | #define DEFAULTTIME2WAIT "DefaultTime2Wait" | 76 | #define DEFAULTTIME2WAIT "DefaultTime2Wait" |
@@ -113,6 +114,10 @@ extern void iscsi_set_session_parameters(struct iscsi_sess_ops *, | |||
113 | #define INITIAL_INITIALR2T YES | 114 | #define INITIAL_INITIALR2T YES |
114 | #define INITIAL_IMMEDIATEDATA YES | 115 | #define INITIAL_IMMEDIATEDATA YES |
115 | #define INITIAL_MAXRECVDATASEGMENTLENGTH "8192" | 116 | #define INITIAL_MAXRECVDATASEGMENTLENGTH "8192" |
117 | /* | ||
118 | * Match outgoing MXDSL default to incoming Open-iSCSI default | ||
119 | */ | ||
120 | #define INITIAL_MAXXMITDATASEGMENTLENGTH "262144" | ||
116 | #define INITIAL_MAXBURSTLENGTH "262144" | 121 | #define INITIAL_MAXBURSTLENGTH "262144" |
117 | #define INITIAL_FIRSTBURSTLENGTH "65536" | 122 | #define INITIAL_FIRSTBURSTLENGTH "65536" |
118 | #define INITIAL_DEFAULTTIME2WAIT "2" | 123 | #define INITIAL_DEFAULTTIME2WAIT "2" |