[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Fri Jul 29 12:38:02 MDT 2011
The branch, master has been updated
via 1d4d919 Secod part of bugfix for bug #8335 - file copy aborts with smb2_validate_message_id: bad message_id
via 9edc159 First part of bugfix for bug #8335 - file copy aborts with smb2_validate_message_id: bad message_id
from fac5c65 s3: Add a fallback for missing open&x support in OS/X Lion
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 1d4d9194abf3694e2f890744c6f7764088b1c1f3
Author: Jeremy Allison <jra at samba.org>
Date: Thu Jul 28 20:23:30 2011 -0700
Secod part of bugfix for bug #8335 - file copy aborts with smb2_validate_message_id: bad message_id
Modify the credit granting algorithm to closer to what I believe
Windows does.
Split up max_credits into 1/16ths, and then scale
the requested credits by how many 16ths have been
currently granted. Less than 1/16th == grant all
requested (100%), scale down as more have been
granted. Never ask for less than 1 if the client
asked for at least 1.
Autobuild-User: Jeremy Allison <jra at samba.org>
Autobuild-Date: Fri Jul 29 20:37:42 CEST 2011 on sn-devel-104
commit 9edc1599125fbd3588a22d9a4145666a9c322798
Author: Jeremy Allison <jra at samba.org>
Date: Thu Jul 28 20:22:45 2011 -0700
First part of bugfix for bug #8335 - file copy aborts with smb2_validate_message_id: bad message_id
Set default max credits to 8192 now this has been documented in the
SMB2 spec.
-----------------------------------------------------------------------
Summary of changes:
docs-xml/smbdotconf/protocol/smb2maxcredits.xml | 2 +-
source3/include/local.h | 2 +-
source3/smbd/smb2_server.c | 27 ++++++++++++++++++++--
3 files changed, 26 insertions(+), 5 deletions(-)
Changeset truncated at 500 lines:
diff --git a/docs-xml/smbdotconf/protocol/smb2maxcredits.xml b/docs-xml/smbdotconf/protocol/smb2maxcredits.xml
index 69d04f7..310b898 100644
--- a/docs-xml/smbdotconf/protocol/smb2maxcredits.xml
+++ b/docs-xml/smbdotconf/protocol/smb2maxcredits.xml
@@ -8,7 +8,7 @@
that Samba tells the client it will allow. This is similar to the <smbconfoption name="max mux"/>
parameter for SMB1. You should never need to set this parameter.
</para>
-<para>The default is 128 credits, which is the same as a Windows SMB2 server.</para>
+<para>The default is 8192 credits, which is the same as a Windows 2008R2 SMB2 server.</para>
</description>
<value type="default">128</value>
diff --git a/source3/include/local.h b/source3/include/local.h
index 594f700..d71a72c 100644
--- a/source3/include/local.h
+++ b/source3/include/local.h
@@ -235,7 +235,7 @@
#define DEFAULT_SMB2_MAX_READ (1024*1024)
#define DEFAULT_SMB2_MAX_WRITE (1024*1024)
#define DEFAULT_SMB2_MAX_TRANSACT (1024*1024)
-#define DEFAULT_SMB2_MAX_CREDITS 128
+#define DEFAULT_SMB2_MAX_CREDITS 8192
#define DEFAULT_SMB2_MAX_CREDIT_BITMAP_FACTOR 2
#endif
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index 11b5ed8..288cc79 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -455,9 +455,30 @@ static void smb2_set_operation_credit(struct smbd_server_connection *sconn,
SMB_ASSERT(sconn->smb2.max_credits >= sconn->smb2.credits_granted);
- /* Remember what we gave out. */
- credits_granted = MIN(credits_requested, (sconn->smb2.max_credits -
- sconn->smb2.credits_granted));
+ if (credits_requested) {
+ uint16_t modified_credits_requested;
+ uint32_t multiplier;
+
+ /*
+ * Split up max_credits into 1/16ths, and then scale
+ * the requested credits by how many 16ths have been
+ * currently granted. Less than 1/16th == grant all
+ * requested (100%), scale down as more have been
+ * granted. Never ask for less than 1 as the client
+ * asked for at least 1. JRA.
+ */
+
+ multiplier = 16 - (((sconn->smb2.credits_granted * 16) / sconn->smb2.max_credits) % 16);
+
+ modified_credits_requested = (multiplier * credits_requested) / 16;
+ if (modified_credits_requested == 0) {
+ modified_credits_requested = 1;
+ }
+
+ /* Remember what we gave out. */
+ credits_granted = MIN(modified_credits_requested,
+ (sconn->smb2.max_credits - sconn->smb2.credits_granted));
+ }
if (credits_granted == 0 && sconn->smb2.credits_granted == 0) {
/* First negprot packet, or ensure the client credits can
--
Samba Shared Repository
More information about the samba-cvs
mailing list