Microsoft KB Archive/306981

= Level II Oplocks Are Not Granted After a File Is Locked =

Article ID: 306981

Article Last Modified on 12/1/2007

-

APPLIES TO


 * Microsoft Windows 2000 Service Pack 1
 * Microsoft Windows 2000 Service Pack 2
 * Microsoft Windows 2000 Advanced Server
 * Microsoft Windows 2000 Advanced Server
 * Microsoft Windows 2000 Service Pack 1
 * Microsoft Windows 2000 Service Pack 2
 * Microsoft Windows XP Home Edition
 * Microsoft Windows XP Professional
 * Microsoft Windows XP Professional x64 Edition
 * Microsoft Windows NT Workstation 4.0 Developer Edition
 * Microsoft Windows NT Workstation 4.0 Developer Edition
 * Microsoft Windows NT Workstation 4.0 Developer Edition
 * Microsoft Windows NT Workstation 4.0 Developer Edition
 * Microsoft Windows NT Workstation 4.0 Developer Edition
 * Microsoft Windows NT Workstation 4.0
 * Microsoft Windows NT Workstation 4.0 Developer Edition
 * Microsoft Windows NT Workstation 4.0 Developer Edition
 * Microsoft Windows NT Server 4.0 Standard Edition
 * Microsoft Windows NT 4.0 Service Pack 1
 * Microsoft Windows NT 4.0 Service Pack 2
 * Microsoft Windows NT 4.0 Service Pack 3
 * Microsoft Windows NT 4.0 Service Pack 4
 * Microsoft Windows NT 4.0 Service Pack 5
 * Microsoft Windows NT 4.0 Service Pack 6
 * Microsoft Windows NT 4.0 Service Pack 6a

-



This article was previously published under Q306981



SYMPTOMS
Level II oplocks are not granted for a file that has had a range of the file locked. This behavior occurs until all references to the file are removed, including references from the operating system, such as the file cache.

This problem prevents network clients from using cached or read-ahead local information, which may affect performance when multiple network clients attempt to detect file data.

For more information about oplock behavior, view both the MORE INFORMATION and REFERENCES sections in this article.



CAUSE
This problem occurs because the file system architecture in the products that are listed at the beginning of this article do not provide a mechanism to synchronize file locks and oplocks. As a result, Level II oplocks cannot be safely granted for a given file after a file lock has been granted for that file.



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.



MORE INFORMATION
You cannot remove the described restrictions on grantable oplock levels without alteratering the system kernel and the Installable File System (IFS) toolkit. This requires redevelopment and redeployment of all file systems (NTFS, CDFS, FastFat, UDFS, and so on, including those file systems that are provided by third parties). The impact of these changes are beyond the scope of hotfixes and service packs for existing operating systems.

Steps to Reproduce the Problem
The following steps require a Windows 2000-based server, and two Windows NT or Windows 2000-based clients.   Client 1 opens the file, requesting read and write access and sharing. For example, this code generates NT_CREATE_ANDX SMB to the server: HANDLE h = CreateFile( &quot;\\server\share\filename.ext&quot;,                      GENERIC_WRITE | GENERIC_READ,                       FILE_SHARE_WRITE | FILE_SHARE_READ,                       0, OPEN_EXISTING,                       FILE_ATTRIBUTE_NORMAL, 0 );  The server responds to client 1 with NT_CREATE_ANDX SMB with the oplock level set to &quot;Batch&quot;. Client 2 opens the file, requesting read and write access and sharing. The server sends LOCKING_AND_X SMB to client 1, with the Break Oplock flag set. The server responds to client 2 with NT_CREATE_ANDX SMB with the oplock level set to &quot;II&quot;.  Client 2 requests an exclusive lock against the file. For example, this code generates LOCKING_ANDX SMB to the server: OVERLAPPED o = { NULL, NULL, 0, 0, NULL }; LockFileEx( h, LOCKFILE_EXCLUSIVE_LOCK, 0, 0, 0, &o ); </li> The server notifies both client 1 and client 2 of the lock (LOCKING_ANDX SMB).</li> Client 1 and client 2 close the file.</li> Client 1 opens the file, requesting read and write access and sharing.</li> The server responds to client 1 with NT_CREATE_ANDX SMB with the oplock level set to &quot;Batch&quot;.</li> Client 2 opens the file, requesting read and write access and sharing.</li> The server sends LOCKING_AND_X SMB to client 1, with the Break Oplock flag set.</li> The server responds to client 2 with NT_CREATE_ANDX SMB with the oplock level set to &quot;None&quot;.</li></ol>

<div class="references_section">