File caching while "oplocks=False", black magic or what?

Steve Litt slitt at troubleshooters.com
Sun Nov 28 05:00:08 GMT 1999


Also, experiment with strict locking=yes and see if it changes the symptom

Steve Litt

At 09:26 AM 11/28/1999 +1100, Steve Litt wrote:
>Just for fun can you add strict sync=yes, and see whether the symptom
changes?
>
>Thanks
>
>Steve Litt
>
>
>At 09:02 AM 11/28/1999 +1100, Yannis Tzavellas wrote:
>>   NOTE: I have definitely put "oplocks=False" in my smb.conf.  I use a
>>program running on 2 machines (win95 and win98) to access data on my samba
>>server (samba 2.0.3-8, on Redhat 6.0). The programs, when accessing data on
>>the server, go like this:             int put_record(..) 
>>                            { 
>>              if (lock(...)) { 
>>                 if (write(...)) { 
>>                                ... 
>>                       } else ... 
>>                     } else ... 
>>                            }  i.e they simply lock the file and perform a
>>read or write on it.  Files are flushed after writing. So whenever anyone
>>of the 2 windows clients changes a record, this change is actually stored
>>in samba. (A linux-version of the "client" program that runs on the Linux
>>box, sees the change.)  BUT this does't work the other way around: A change
>>performed by the linux-client IS NOT SEEN by any of the windows clients.
>>They behave lazily on reading (as if they are caching data).  /* 
>>After 2 days of debugging, reading docs, drinking coffe and NOT eating
>>pizza (or almost anything), 
>>.... I finaly find "a way" to get rid of the problem. But what a way it
>is... 
>>*/  The cure I used is absolutely incomprehensible to me:  ==>> I just
>>added a little delay (?) loop at the beginning of the 
>>==>> get_record() function as in :  int get_record(..) 
>>{ 
>>  // this little delay (?) loop seems to cure the problem 
>> <4; i++) { // 4 or more works, 3 does't ! 
>>           // fh = the file handle 
>>                 // no matter what. I read 10 bytes 
>>  } 
>>  // nothing else touched anywhere...    if (lock(...)) { 
>>    if (read(...)) { 
>>      .... 
>>    } else ... 
>>  } else ... 
>>}  and after this everything seems to work fine !  So my questions are: 
>>1. Why windows clients insist to cache data despite of "oplocks=False" ? 
>>2. Does anybody understand what is going on with my "solution" and how it
>>actualy manages to force the clients NOT to cache data?  Thanks ! 
>>  
>
>



More information about the samba mailing list