In summary, Samba writes are async by default. But the behavior is configurable.
Here is a great summary by Eric Roseme.
Samba defaults to asynchronous writes. smbd writes to memory buffer,
then returns to processing. Buffer is flushed to disk later. This is
the most efficient behavior.
Windows CreateFile API has the FILE_FLAG_WRITE_THROUGH flag, which
requests synchronous writes. smbd writes to memory buffer, blocks
until buffer contents are written to disk, which results in poor
performance, but better data integrity.
When "strict sync = yes" (default = no) Samba honors the
FILE_FLAG_WRITE_THROUGH flag, and results in synchronous writes when
called by the CreateFile API.
When "sync always = yes" (default = no) Samba executes all writes
synchronously. This requires that “strict sync = yes”.
StrictSync SyncAlways ff_write_through Sync-Writes
no no no no
yes no no no
yes no yes Yes (slow)
no yes yes no
yes yes yes/no yes (very slow)