2.1.5.18.3 Indicating an Oplock Break to the Server

The inputs for indicating an oplock break to the server are:

  • BreakingOplockOpen: The Open used to request the oplock that is now breaking.

  • NewOplockLevel: The type of oplock the requested oplock has been broken to. Valid values are as follows:

    • LEVEL_NONE (that is, no oplock)

    • LEVEL_TWO

    • A combination of one or more of the following flags:

      • READ_CACHING

      • HANDLE_CACHING

      • WRITE_CACHING

  • AcknowledgeRequired: A Boolean value; TRUE if the server MUST acknowledge the oplock break, FALSE if not, as specified in section 2.1.5.19.

  • OplockCompletionStatus: The NTSTATUS code to return to the server.

This algorithm simply represents the completion of an oplock request, as specified in section 2.1.5.18.1 or section 2.1.5.18.2. The server is expected to associate the return status from this algorithm with BreakingOplockOpen, which is the Open passed in when it requested the oplock that is now breaking.

It is important to note that because several oplocks can be outstanding in parallel, although this algorithm represents the completion of an oplock request, it might not result in the completion of the algorithm that called it. In particular, calling this algorithm will result in completion of the caller only if BreakingOplockOpen is the same as the Open with which the calling algorithm was itself called. To mitigate confusion, each algorithm that refers to this section will specify whether that algorithm's operation terminates at that point or not.

The object store MUST return OplockCompletionStatus, AcknowledgeRequired, and NewOplockLevel to the server (the algorithm is as specified in section 2.1.5.18.1 and section 2.1.5.18.2).