[Samba] Samba lock X Unix fcntl() lock

Roberto João Lopes Garcia roberto at mha.com.br
Tue Feb 26 10:12:06 GMT 2002


I look at list archives and at samba docs but I did not found ...
please can some one help me?

I have to write a unix program that need to check if it can write to a file and place the apropriate locks before write.  Those files are in a Samba share.  I intend to use fcntl() function to check and set the locks.

I wrote a test program to see if the fcntl() function can see the samba locks reported by smbstatus -L. I test it with 5 files opened at the same time: rob.xls (ms excel), rob.doc (ms word), rob.dwg (autocad), rob.sdw (staroffice) and rob.txt (ms wordpad).
# smbstatus  -L | grep '/rob/rob'
7499   DENY_WRITE RDWR       NONE /h:/rob/rob.sdw   Tue Feb 26 13:22:20 2002
7499   DENY_NONE  RDWR       NONE /h:/rob/rob.doc   Tue Feb 26 13:10:29 2002
7499   DENY_NONE  RDWR       NONE /h:/rob/rob.xls   Tue Feb 26 13:13:04 2002
7499   DENY_WRITE RDWR       NONE /h:/rob/rob.dwg   Tue Feb 26 13:15:43 2002

WordPad appears to does not lock rob.txt file.

My test program only detects the lock in the rob.doc and rob.xls files. 

What happen? Samba does not put fcntl lock in rob.dwg and rob.sdw files? Is it a normal behaviour or a bug? What is the diference between DENY_NONE and DENY_WRITE? Is it my program fault? Are there some mistakes?

See my C program fragment:
   lock.l_type=F_WRLCK;     /*** Write lock ***/
   lock.l_whence=SEEK_SET;  /*** File begin ***/
   lock.l_start=0;          /*** Off set, 0 ***/
   lock.l_len=0;            /*** Up to the end of file ***/
   lock.l_pid = pid;        /*** this procces pid ***/

   ret=fcntl(fd, F_GETLK, & lock); /** see if the file can be locked **/
   if(ret==-1) {                   /** error, close fd and exit      **/

   if(lock.l_type != F_UNLCK) {    /** File locked by some other proccess, show info **/
   else {                          /** file unlocked, we can lock it      **/

See testparm fragment:

        kernel oplocks = Yes
        blocking locks = Yes
        fake oplocks = No
        locking = Yes
        oplocks = Yes
        level2 oplocks = Yes
        oplock contention limit = 2
        posix locking = Yes
        strict locking = No

        path = /h:
        read only = No
        create mask = 0660
        directory mask = 0770
        oplocks = No

Samba: 2.2.3a made from the source tar ball.
Server: Linux 2.4.17 kernel on dual intel PIII.

Obs.: My test program shows the same result when compiled and runed at a Sun ultra1 solaris 2.5 through a NFS mount to the Samba server.

Thank you


Eng. Roberto João Lopes Garcia        E-mail: roberto at mha.com.br 
F. 55 11 3747 7697   FAX  55 11 3747-7700

                MHA Engenharia Ltda     

E-mail: mha at mha.com.br    WWW: http://www.mha.com.br

Av Maria Coelho Aguiar, 215 Bloco D     2 Andar
Centro Empresarial de Sao Paulo
Sao Paulo - BRASIL - 05805 000

More information about the samba mailing list