3.3.6.1 Oplock Break Acknowledgment Timer Event

The oplock break acknowledgment timer MUST be started when the server sends an SMB2 OPLOCK_BREAK Notification (as specified in section 2.2.23) to the client as a result of the underlying object store indicating an oplock break or lease break on a file.

When the oplock break acknowledgment timer expires, the server MUST scan for oplock breaks that have not been acknowledged by the client within the configured time. It does this by enumerating all opens in the GlobalOpenTable. For each open, if Open.OplockState is Breaking and Open.OplockTimeout is earlier than the current time, the server MUST acknowledge the oplock break to the underlying object store represented by Open.LocalOpen, set Open.OplockLevel to SMB2_OPLOCK_LEVEL_NONE, and set Open.OplockState to None.

If Open.Connection.Dialect is "2.1" or belongs to the SMB 3.x dialect family, and the server supports leasing, the server MUST scan for lease breaks that have not been acknowledged by the client within the configured time. It does this by enumerating all lease tables in GlobalLeaseTableList. For each lease table, it enumerates all leases in LeaseTable.LeaseList. For each lease, if Lease.Breaking is TRUE and Lease.LeaseBreakTimeout is earlier than the current time, the server MUST acknowledge the lease break to the underlying object store represented by the opens in Lease.LeaseOpens, and set Lease.LeaseState to NONE.

The timer MUST then be restarted to expire again at the time of the next oplock time-out. If no other opens have Open.OplockState equal to Breaking, and no leases (if implemented) have Lease.Breaking set to TRUE, the timer MUST NOT be restarted.

Show: