[Samba] oplocks, kernel oplocks, kernel share modes, .. - how it all works?

Jeremy Allison jra at samba.org
Tue Jan 24 21:36:31 UTC 2023


On Tue, Jan 24, 2023 at 09:32:09PM +0000, Rowland Penny via samba wrote:
>
>On 24/01/2023 21:19, Ralph Boehme via samba wrote:
>>On 1/24/23 22:12, Jeremy Allison wrote:
>>>On Wed, Jan 25, 2023 at 12:00:09AM +0300, Michael Tokarev wrote:
>>>>24.01.2023 23:23, Jeremy Allison пишет:
>>>>..
>>>>>which means you end up with LEASE_OPLOCK, granted=SMB2_LEASE_NONE
>>>>>which is what you see with smbstatus.
>>>>>
>>>>>If you turn on kernel oplocks = yes, I think you must also
>>>>>set smb2 leases = no in order for this to work.
>>>>
>>>>I've set smb2 leases = no (to global). I don't see these LEASE() 
>>>>anymore,
>>>>I see "NONE", "BATCH" and "LEVEL_II" now, like in old good times :)
>>>
>>>Oh, very interesting. Something is wrong in our code then, as Ralph
>>>already mentioned we have:
>>>
>>>         capabilities = 0;
>>>         if (lp_host_msdfs()) {
>>>                 capabilities |= SMB2_CAP_DFS;
>>>         }
>>>
>>>         if (protocol >= PROTOCOL_SMB2_10 &&
>>>             lp_smb2_leases() &&
>>>             lp_oplocks(GLOBAL_SECTION_SNUM) &&
>>>             !lp_kernel_oplocks(GLOBAL_SECTION_SNUM))
>>>         {
>>>                 capabilities |= SMB2_CAP_LEASING;
>>>         }
>>>
>>>so setting "kernel oplocks = yes" should prevent SMB2_CAP_LEASING
>>>being returned to the client. A wireshark trace when you remove
>>>the "smb2 leases = no" line would be good to look at.
>>
>>oh! That is the only place where we treat kernel oplocks as a global 
>>option. The docs and the rest of the code allow this as a per share 
>>option. Looks like we have a problem here.
>>
>
>You could try asking the person who wrote that bit of the code, a 
>certain Jeremy Allison ;-)

Ah, that code has gone through so many engineers and changes,
who knows who originally added the bug :-) :-) :-).

Probably me though :-).



More information about the samba mailing list