I have mounted a cifs file on two Linux machines. I have a Perl script which can modify the shared file. How do we lock the file over network in this scenario?
A:
I couldn't find a module on CPAN to achieve this. It seems that the modules wrapping libsmbclient do not implement the OPLOCKing portion of the protocol.
In the smbfs sources, the function smbfs_smb_lock
appears to do what you need.
Either write your own XS wrapper module, or use Inline::C.
David Toso
2009-07-17 06:23:37
+2
A:
Looks like we can fcntl() for locking files. I just found its working :) this link might be useful
http://www.cpan.org/scripts/file-handling/flock.using.fcntl.example
Thanks for your response
_Anandan
Anandan
2009-07-17 07:48:21
Over the network you have to do more work than that. It can also depend on what your networked filesystem supports.
brian d foy
2009-07-17 17:43:35
He says it's CIFS. I couldn't see support for client oplock requests in any of the perl modules which implement SMB protocol.
David Toso
2009-07-18 06:14:48
+1
A:
If your file server is Samba, then look also at the smb.conf man page:
...
blocking locks (S)
This parameter controls the behavior of smbd(8) when given a request by a client
to obtain a byte range lock on a region of an open file, and the request has a
time limit associated with it.
If this parameter is set and the lock range requested cannot be immediately
satisfied, samba will internally queue the lock request, and periodically attempt
to obtain the lock until the timeout period expires.
If this parameter is set to no, then samba will behave as previous versions of
Samba would and will fail the lock request immediately if the lock range cannot
be obtained.
Default: blocking locks = yes
...
locking (S)
This controls whether or not locking will be performed by the server in response
to lock requests from the client.
If locking = no, all lock and unlock requests will appear to succeed and all lock
queries will report that the file in question is available for locking.
If locking = yes, real locking will be performed by the server.
This option may be useful for read-only filesystems which may not need locking
(such as CDROM drives), although setting this parameter of no is not really
recommended even in this case.
Be careful about disabling locking either globally or in a specific service, as
lack of locking may result in data corruption. You should never need to set this
parameter.
Eric M
2009-07-17 17:50:24