Re: svn commit: r264025 - head/sys/dev/iscsi

2014-04-02 Thread Ian Lepore
On Tue, 2014-04-01 at 22:03 +, 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.

-- Ian


 + error = soreserve(ic-ic_socket, sendspace, recvspace);
   if (error != 0) {
   ICL_WARN(soreserve failed with error %d, error);
   icl_conn_close(ic);
 


___
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


Re: svn commit: r264025 - head/sys/dev/iscsi

2014-04-02 Thread Edward Tomasz Napierała
Wiadomość napisana przez Ian Lepore w dniu 2 kwi 2014, o godz. 15:24:

 On Tue, 2014-04-01 at 22:03 +, 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


svn commit: r264025 - head/sys/dev/iscsi

2014-04-01 Thread Edward Tomasz Napierala
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.cTue Apr  1 21:54:20 2014(r264024)
+++ head/sys/dev/iscsi/icl.cTue 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;
+   }
+
+   error = soreserve(ic-ic_socket, sendspace, recvspace);
if (error != 0) {
ICL_WARN(soreserve failed with error %d, error);
icl_conn_close(ic);
___
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