DBase File locking issues (PR#20441)

Jim Morris Jim at Morris.net
Thu Sep 16 19:54:36 GMT 1999

Hello Jeremy,

Thursday, September 16, 1999, 1:26:30 PM, you wrote:

Allison> Great debugging work !


Allison> The pos_start is probably the problem. On Win32 this is an unsigned
Allison> 32 bit number. On POSIX (Samba) lock calls treat this as a signed
Allison> 32 bit number. Samba on a 32 bit system such as Linux does some
Allison> lock mangling to move this into the POSIX range. It should work.

Actually, even according to the Borland C++ 3.1 manual (old!), the
offset is a long (signed 32 bit). The PC test program I have now shows
the offset being locked as -268435458.  I now have the following debug
output from Samba, in log level 10, that shows the problem. Appears
the fcntl call to lock the file region is failing in either the C
library or Linux kernel....  Also note that Samba at least is treating
the lock offset as an unsigned long, rather than a signed long.

[1999/09/16 14:03:25, 10] locking/locking.c:remove_share_oplock_fn(246)
  remove_share_oplock_fn: removing oplock info for entry dev=801 ino=239624
[1999/09/16 14:03:25, 10] smbd/reply.c:reply_lockingX(4252)
  reply_lockingX: lock start=4026531839, len=1 for file cbtest/cbtest.DBF
[1999/09/16 14:03:25, 10] locking/locking.c:do_lock(113)
  do_lock: lock type 1 start=4026531839 len=1 requested for file cbtest/cbtest.DBF
[1999/09/16 14:03:25, 8] lib/util.c:fcntl_lock(2676)
  fcntl_lock 8 6 4026531839 1 1
[1999/09/16 14:03:25, 3] lib/util.c:fcntl_lock(2702)
  fcntl lock gave errno 22 (Invalid argument)
[1999/09/16 14:03:25, 3] lib/util.c:fcntl_lock(2724)
  lock failed at offset 4026531839 count 1 op 6 type 1 (Invalid argument)
[1999/09/16 14:03:25, 3] lib/util.c:fcntl_lock(2729)
  locking not supported? returning True
[1999/09/16 14:03:25, 3] smbd/reply.c:reply_lockingX(4290)
  lockingX fnum=4880 type=2 num_locks=1 num_ulocks=0
[1999/09/16 14:03:25, 5] lib/util.c:show_msg(459)

Note that after the lock failure, Samba decided to return a TRUE
result!  Ouch....   That explains why both clients think they got the
lock, when the lock actually failed!

I'm looking at the kernel source file linux/fs/locks.c right now,
trying to determine what the "invalid argument" was.  I've not quite
figured it out at this point.

Allison> Thanks for all the analysis,

Sure!  If you want, I can quickly email you a test DOS executable, and
some small DBase files to test against.

Best regards,
| Jim Morris  | Business:  jmorris at rtc-group.com |
|             | Personal:  Jim at Morris.net        |
|    World Wide Web:  http://Jim.Morris.net      |
|       AOL Instant Messenger:  JFM2001          |

More information about the samba mailing list