[cifs-protocol] MS-SMB2: write-through and unbuffered IO
Ralph Boehme
slow at samba.org
Thu Feb 27 14:42:09 UTC 2025
Hello dochelp,
I'm doing some research on the expected server behaviour wrt to
write-through and unbuffered IO, driven by working on the Persistent
Handles implementation in Samba.
As per MS-SMB2 the protocol offers knobs to request these
1) at open time, and
2) per write
For 1) there are
FILE_WRITE_THROUGH
FILE_NO_INTERMEDIATE_BUFFERING
and for 2) there are
SMB2_WRITEFLAG_WRITE_THROUGH
SMB2_WRITEFLAG_WRITE_UNBUFFERED
The protocol documentation (also when read together with MS-FSA and
MS-CIFS) seems to be a bit vague wrt to dependencies between per-open
behaviour and per-write behaviour.
---8<---
3.3.5.13 "Receiving an SMB2 WRITE Request"
If Connection.Dialect is "3.0.2" or "3.1.1",
SMB2_WRITEFLAG_WRITE_THROUGH is set in the Flags field of the request,
SMB2_WRITEFLAG_WRITE_UNBUFFERED is not set in the Flags field of the
request, and Open.CreateOptions doesn't include the
FILE_NO_INTERMEDIATE_BUFFERING bit, the server MUST fail the request
with STATUS_INVALID_PARAMETER.
If Connection.Dialect is "2.1" or "3.0", SMB2_WRITEFLAG_WRITE_THROUGH is
set in the Flags field of the request, and Open.CreateOptions doesn't
include the FILE_NO_INTERMEDIATE_BUFFERING bit, the server MUST fail the
request with STATUS_INVALID_PARAMETER.
---8<---
If my reading of the above paragraph is correct, it is not possible to
to request per-write write-through IO without requesting unbuffered IO
on the handle.
Is this true? Am I missing something? Can you please clarify?
Thanks!
-slow
More information about the cifs-protocol
mailing list