The Samba-Bugzilla – Bug 6174
Lock a table record in foxpro(Dbf) don't work with cifs.The data is overwritten.
Last modified: 2012-04-29 21:05:14 UTC
Server: linux 188.8.131.52 samba 3.0.32, (kernel oplocks=no oplocks=no )
Client 1: linux 184.108.40.206 cifs 1.55 OplockEnabled=0 (dosemu 1.2.2 lredir a cifs mount)
Cliente 2: windows 2000 SP4
Both clients add records simultaneously on the server, with
a simple program in FoxPro DOS, but does not lock well records, and
If I do that with 2 windows client, everything works fine.
If I access directly (without cifs mount)to the file(dbf table) in the server with DOSEMU everything works fine.
This is the Foxpro program's that use the clients. In linux replace "windows client" with "linux client"
use f:\temp\costo shared in 0
for CONTA=1 to 30000
replace number with CONTA
replace client with "windows client "+str(CONTA,5)
what sort of locking does foxpro use? POSIX or BSD locking?
I don't know. Foxpro just use bytes range blocking. The problem appears when foxpro run under linux-dosemu opening tables in a cifs mount.
Cifs seems to save all cache data from the local client to the server, and overwrites the data from others clients.
Sorry for the long delay in response. cifs.ko has a rather broken caching model
by default. Does this work any better if you use a fairly recent kernel and
mount with "-o strictcache" ?
Retest with foxpro program.
Server: linux 32 bits 220.127.116.11 samba 3.5.10, (default options)
Client 1: linux 32 bits 18.104.22.168 (dosemu 1.4.0 lredir a cifs mount)
Client 2: windows 7 64 bits
without strictcache -> corrupt data
with strictcache -> works fine. It´s save 60000 records as expect.
I can close this issue.
Awesome. Thanks for testing it. I'm in the process of trying to make strictcache the default as well.