What Actually Triggers This Error
You see ERROR_OPLOCK_BREAK_IN_PROGRESS (0x000002E6) when an application tries to open or create a file on a remote SMB share while the server is still processing an oplock break for that same file. This often happens in specific scenarios:
- Hyper-V hosts starting a VM that has a VHDX file stored on a network file share (CSV or SMB 3.0).
- SQL Server reading a database file over SMB while another process—like a backup agent—tries to open the same file for write.
- Any file server workload where one client holds an exclusive oplock and another client requests access before the first client's break acknowledgment arrives.
The error code itself tells you the operation completed—that's the weird part. The file was opened or created successfully, but the oplock break was still in progress when the operation finished. So the application gets an error back even though the file handle is technically valid.
Why This Happens
Opportunistic locking (oplock) is a caching mechanism. A client (say, a Hyper-V host) requests a level 1 oplock on a VHDX file so it can cache reads and writes locally without hitting the server every time. When a second client wants to open that file in a way that's incompatible with the existing oplock—like requesting write access—the server sends an oplock break to the first client. The first client must flush its cache and downgrade or release the lock.
The delay between the server sending the break and the client acknowledging it is the "break in progress" window. If a third request lands during that window, the server might complete the open operation but still return this error because the oplock state hasn't settled. This is by design—Microsoft wanted callers to know the file's caching state isn't stable yet.
The Fixes
You have three knobs to turn. Don't try all at once—test each adjustment separately.
1. Increase the oplock break retry timeout on the SMB server
This gives clients more time to respond to oplock breaks before the server considers it failed. Works well for Hyper-V clusters with slow network paths.
reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v OplockBreakRetryWait /t REG_DWORD /d 60 /f
Then restart the server service or reboot.
2. Disable oplocks on the specific share (use as a last resort)
If you don't need caching—like for an archive share—kill oplocks entirely. This will increase network traffic but eliminate the break delay.
fsutil behavior set disableoplock 1
This is a system-wide setting. To disable per-share, you need to use the registry under HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares\YourShareName and change the Security or ForceLevel2Oplocks value. Simpler to just disable globally for the machine if you can spare the performance hit.
3. Adjust the client-side oplock break wait timeout
On the client machine (where the app is opening the file), you can increase how long the redirector waits for an oplock break acknowledgment.
reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters /v OplockBreakTimeout /t REG_DWORD /d 60 /f
Reboot the client. This helps when the server is fast but the client's network stack is slow to process the break notification.
When It Still Fails
If the error persists after trying these, look beyond pure oplock tuning. Check the network for packet loss—oplocks depend on reliable TCP connections. A single dropped packet can extend the break window unpredictably. Use ping -n 100 -l 1450 between both machines and look for lost packets.
Also inspect the event logs on the server for SMB oplock-related warnings (Event ID 57, 58, or 59 under Microsoft-Windows-SMBServer). If you see repeated oplock break failures, your application might be holding exclusive handles open longer than expected. That's a client-side bug, not a network problem.
One more thing: if you're running Windows Server 2012 or older, consider upgrading. SMB 3.0 improved oplock handling significantly, and Server 2019/2022 include a registry key EnableOplockForceClose under HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters that can force close stuck breaks after a timeout. Set it to 1 and watch the server clean up stalled breaks automatically.