Hi Slow, I'll look into this and get back to you with what I find.
Also, upon further review of the previous note I sent you, it actually appears that the document is accurate in that if *both* SMB2_WRITEFLAG_WRITE_UNBUFFERED and FILE_NO_INTERMEDIATE_BUFFERING flags are not set, it will not be considered an unbuffered write. This would then throw the error " STATUS_INVALID_PARAMETER" as the per-request write through flag is only supported for unbuffered writes. Apologies for the confusion. I will let you know what I find regarding persisting modifications to stable storage prior to completion of I/O. Regards, Kristian Smith Support Escalation Engineer | Microsoft(r) Corporation Email: [email protected] -----Original Message----- From: Ralph Boehme <[email protected]> Sent: Friday, March 14, 2025 5:23 AM To: Kristian Smith <[email protected]> Cc: [email protected]; Microsoft Support <[email protected]> Subject: [EXTERNAL] Re: MS-SMB2: write-through and unbuffered IO - TrackingID#2502270040011252 Hi Kristian, thanks, makes sense. On a related note: from SDC presentations and from memory, for SMB3 Persistent Handles the server must ensure that IO is persisted on stable storage before sending a response to the client, iow force SMB2_WRITEFLAG_WRITE_THROUGH for all IO requests on Persistent Handles. <https://www.snia.org/educational-library/smb-22-bigger-faster-scalier-parts-1-and-2-2011> Page 42: "All modifications made via the handle are persisted to stable storage before the I/O is completed." However, I fail to find any protocol documentation corresponding to this requirement. Can you please point me at the relevant section(s)? Thanks! -slow On 3/13/25 10:50 PM, Kristian Smith wrote: > Hi Slow, > > Thanks again for your patience while I researched this. I have confirmed that > the per-request write-through flag is only supported for unbuffered writes. > There is a discrepancy, however, in the wording of the doc such that the AND > in the following quote: > > "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." > > Should be an OR as seen below: > > " 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, OR Open.CreateOptions doesn't > include the FILE_NO_INTERMEDIATE_BUFFERING bit, the server MUST fail the > request with STATUS_INVALID_PARAMETER." > > You should see this change in a future release of the document. Please let me > know if you have any other questions or concerns. > > Regards, > Kristian Smith > Support Escalation Engineer | Microsoft(r) Corporation > Email: [email protected] > > -----Original Message----- > From: Kristian Smith > Sent: Tuesday, March 11, 2025 8:43 AM > To: Ralph Boehme <[email protected]> > Cc: [email protected]; Microsoft Support > <[email protected]> > Subject: RE: MS-SMB2: write-through and unbuffered IO - > TrackingID#2502270040011252 > > Hi Slow, > > Apologies for the delayed response on this question. I've been researching > the code on this issue and should have findings soon. > > Thank you for your patience. > > Regards, > Kristian Smith > Support Escalation Engineer | Microsoft(r) Corporation > Email: [email protected] > > -----Original Message----- > From: Obaid Farooqi <[email protected]> > Sent: Thursday, February 27, 2025 9:47 AM > To: Ralph Boehme <[email protected]> > Cc: [email protected]; Microsoft Support > <[email protected]> > Subject: MS-SMB2: write-through and unbuffered IO - > TrackingID#2502270040011252 > > Hi Ralph: > Thanks for contacting Microsoft. I have created a case to track this issue. A > member of the open specifications team will be in touch soon. > > Regards, > Obaid Farooqi > Escalation Engineer | Microsoft > > -----Original Message----- > From: Ralph Boehme <[email protected]> > Sent: Thursday, February 27, 2025 8:42 AM > To: Interoperability Documentation Help <[email protected]> > Cc: [email protected] > Subject: [EXTERNAL] MS-SMB2: write-through and unbuffered IO > > 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 > _______________________________________________ cifs-protocol mailing list [email protected] https://lists.samba.org/mailman/listinfo/cifs-protocol
