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. _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"