Implement SMB Oplocks Phase 1-2

Phase 1: Data structures
- Add oplock_level and share_access fields to Open struct
- Update Open::new() signature with new parameters
- Update handlers/create.rs to pass oplock params

Phase 2: OplockManager
- Create oplock.rs with OplockManager struct
- OplockEntry for tracking per-client oplock state
- can_grant() - check ShareAccess compatibility
- register() / unregister() - lifecycle management
- break_oplock() - generate OPLOCK_BREAK_NOTIFICATION
- Add OplockManager to ServerState
- Add Hash trait to SmbPath for HashMap key

All 229 tests pass.
This commit is contained in:
Warren
2026-06-21 00:17:24 +08:00
parent 487b4450f8
commit 27707bbe0e
6 changed files with 195 additions and 2 deletions
+3
View File
@@ -196,6 +196,8 @@ pub struct ServerState {
/// iteration and connection loops abandon their next read.
pub shutdown: Arc<Notify>,
pub shutting_down: Arc<AtomicBool>,
/// Global oplock state manager (Phase 2).
pub oplock_manager: Arc<crate::oplock::OplockManager>,
}
impl ServerState {
@@ -208,6 +210,7 @@ impl ServerState {
server_start_filetime: now_filetime(),
shutdown: Arc::new(Notify::new()),
shutting_down: Arc::new(AtomicBool::new(false)),
oplock_manager: Arc::new(crate::oplock::OplockManager::new()),
}
}