s3: smbd: Change "strict sync" paramter from "no" to "yes" for 4.7.0.
authorJeremy Allison <jra@samba.org>
Thu, 23 Mar 2017 02:22:31 +0000 (19:22 -0700)
committerJeremy Allison <jra@samba.org>
Fri, 24 Mar 2017 23:49:22 +0000 (00:49 +0100)
Document change and modify in loadparm.c.
Safer default for new installs and vendors.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Christof Schmitt <cs@samba.org>
docs-xml/smbdotconf/tuning/strictsync.xml
lib/param/loadparm.c
source3/param/loadparm.c

index 5cfd38831bb324e5c6ba42417baf836997544476..f2e378877b406b44ec602ae55d8ea885d0e142f7 100644 (file)
@@ -3,26 +3,38 @@
                                 type="boolean"
                  xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
  <description>
-    <para>Many Windows applications (including the Windows 98 explorer
-    shell) seem to confuse flushing buffer contents to disk with doing
-    a sync to disk. Under UNIX, a sync call forces the thread to be
-    suspended until the kernel has ensured that all outstanding data in
-    kernel disk buffers has been safely stored onto stable storage.
-    This is very slow and should only be done rarely. Setting this
-    parameter to <constant>no</constant> (the default) means that
-    <citerefentry><refentrytitle>smbd</refentrytitle>
-    <manvolnum>8</manvolnum></citerefentry> ignores the Windows
-    applications requests for a sync call. There is only a possibility
-    of losing data if the operating system itself that Samba is running
-    on crashes, so there is little danger in this default setting. In
-    addition, this fixes many performance problems that people have
-    reported with the new Windows98 explorer shell file copies.</para>
+    <para>This parameter controls whether Samba honors a request
+    from an SMB client to ensure any outstanding operating system
+    buffer contents held in memory are safely written onto stable
+    storage on disk. If set to <constant>yes</constant>, which is
+    the default, then Windows applications can force the smbd server
+    to synchronize unwritten data onto the disk. If set to
+    <constant>no</constant> then smbd will ignore client
+    requests to synchronize unwritten data onto stable storage on
+    disk.</para>
+
+    <para>In Samba 4.7.0, the default for this parameter changed from
+    <constant>no</constant> to <constant>yes</constant> to better
+    match the expectations of SMB2/3 clients and improve application
+    safety when running against smbd.</para>
+
     <para>The flush request from SMB2/3 clients is handled
-    asynchronously, so for these clients setting the parameter
-    to <constant>yes</constant> does not block the processing of other
-    requests in the smbd process.</para>
+    asynchronously inside smbd, so leaving the parameter as the default
+    value of <constant>yes</constant> does not block the processing of
+    other requests to the smbd process.</para>
+
+    <para>Legacy Windows applications (such as the Windows 98 explorer
+    shell) seemed to confuse writing buffer contents to the operating
+    system with synchronously writing outstanding data onto stable storage
+    on disk. Changing this parameter to <constant>no</constant> means that
+    <citerefentry><refentrytitle>smbd</refentrytitle>
+    <manvolnum>8</manvolnum></citerefentry> will ignore the Windows
+    applications request to synchronize unwritten data onto disk. Only
+    consider changing this if smbd is serving obsolete SMB1 Windows clients
+    prior to Windows XP (Windows 98 and below). There should be no need to
+    change this setting for normal operations.</para>
 </description>
 
 <related>sync always</related>
-<value type="default">no</value>
+<value type="default">yes</value>
 </samba:parameter>
index 335c54a3abee561b31ab66c96ee11c9e464f9a88..cedf8facb8dcaa5700dce44ec875cdc2325d7e62 100644 (file)
@@ -2832,6 +2832,8 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
 
        lpcfg_do_global_parameter(lp_ctx, "strict locking", "Auto");
 
+       lpcfg_do_global_parameter(lp_ctx, "strict sync", "yes");
+
        lpcfg_do_global_parameter(lp_ctx, "map readonly", "yes");
 
        lpcfg_do_global_parameter(lp_ctx, "allow trusted domains", "yes");
index c65e613feea783bb8f5a53e788d57491e03dd590..57220a64282277f9cbd3efd8163fb1f7957d7fc3 100644 (file)
@@ -207,7 +207,7 @@ static struct loadparm_service sDefault =
        .sync_always = false,
        .strict_allocate = false,
        .strict_rename = false,
-       .strict_sync = false,
+       .strict_sync = true,
        .mangling_char = '~',
        .copymap = NULL,
        .delete_readonly = false,