svn commit: r264025 - head/sys/dev/iscsi
Edward Tomasz Napierała
trasz at FreeBSD.org
Wed Apr 2 23:11:58 UTC 2014
Wiadomość napisana przez Ian Lepore w dniu 2 kwi 2014, o godz. 15:24:
> On Tue, 2014-04-01 at 22:03 +0000, Edward Tomasz Napierala wrote:
>> Author: trasz
>> Date: Tue Apr 1 22:03:03 2014
>> New Revision: 264025
>> URL: http://svnweb.freebsd.org/changeset/base/264025
>>
>> Log:
>> Get rid of the "autoscaling", instead just set socket buffer sizes
>> in the usual way. The only thing the old code did was making things
>> less predictable.
>>
>> Sponsored by: The FreeBSD Foundation
>>
>> Modified:
>> head/sys/dev/iscsi/icl.c
>>
>> Modified: head/sys/dev/iscsi/icl.c
>> ==============================================================================
>> --- head/sys/dev/iscsi/icl.c Tue Apr 1 21:54:20 2014 (r264024)
>> +++ head/sys/dev/iscsi/icl.c Tue Apr 1 22:03:03 2014 (r264025)
>> @@ -68,6 +68,14 @@ TUNABLE_INT("kern.icl.partial_receive_le
>> SYSCTL_INT(_kern_icl, OID_AUTO, partial_receive_len, CTLFLAG_RW,
>> &partial_receive_len, 1 * 1024, "Minimum read size for partially received "
>> "data segment");
>> +static int sendspace = 1048576;
>> +TUNABLE_INT("kern.icl.sendspace", &sendspace);
>> +SYSCTL_INT(_kern_icl, OID_AUTO, sendspace, CTLFLAG_RW,
>> + &sendspace, 1048576, "Default send socket buffer size");
>> +static int recvspace = 1048576;
>> +TUNABLE_INT("kern.icl.recvspace", &recvspace);
>> +SYSCTL_INT(_kern_icl, OID_AUTO, recvspace, CTLFLAG_RW,
>> + &recvspace, 1048576, "Default receive socket buffer size");
>>
>> static uma_zone_t icl_conn_zone;
>> static uma_zone_t icl_pdu_zone;
>> @@ -1008,7 +1016,7 @@ icl_conn_free(struct icl_conn *ic)
>> static int
>> icl_conn_start(struct icl_conn *ic)
>> {
>> - size_t bufsize;
>> + size_t minspace;
>> struct sockopt opt;
>> int error, one = 1;
>>
>> @@ -1029,18 +1037,28 @@ icl_conn_start(struct icl_conn *ic)
>> ICL_CONN_UNLOCK(ic);
>>
>> /*
>> - * Use max available sockbuf size for sending. Do it manually
>> - * instead of sbreserve(9) to work around resource limits.
>> + * For sendspace, this is required because the current code cannot
>> + * send a PDU in pieces; thus, the minimum buffer size is equal
>> + * to the maximum PDU size. "+4" is to account for possible padding.
>> *
>> - * XXX: This kind of sucks. On one hand, we don't currently support
>> - * sending a part of data segment; we always do it in one piece,
>> - * so we have to make sure it can fit in the socket buffer.
>> - * Once I've implemented partial send, we'll get rid of this
>> - * and use autoscaling.
>> + * What we should actually do here is to use autoscaling, but set
>> + * some minimal buffer size to "minspace". I don't know a way to do
>> + * that, though.
>> */
>> - bufsize = (sizeof(struct iscsi_bhs) +
>> - ic->ic_max_data_segment_length) * 8;
>> - error = soreserve(ic->ic_socket, bufsize, bufsize);
>> + minspace = sizeof(struct iscsi_bhs) + ic->ic_max_data_segment_length +
>> + ISCSI_HEADER_DIGEST_SIZE + ISCSI_DATA_DIGEST_SIZE + 4;
>> + if (sendspace < minspace) {
>> + ICL_WARN("kern.icl.sendspace too low; must be at least %jd",
>> + minspace);
>> + sendspace = minspace;
>> + }
>> + if (recvspace < minspace) {
>> + ICL_WARN("kern.icl.recvspace too low; must be at least %jd",
>> + minspace);
>> + recvspace = minspace;
>> + }
>> +
>
> The %jd on these is causing build failures on 32-bit arches due to
> size_t being only 32 bits.
Right. Should be fixed now, sorry for breakage.
More information about the svn-src-all
mailing list