[linux-cifs-client] Re: unlocking part of a byte-range lock with, CIFS

Jeremy Allison jra at samba.org
Fri Aug 24 16:32:38 GMT 2007


On Fri, Aug 24, 2007 at 09:29:03AM -0400, Jeff Layton wrote:
> On Fri, 20 Jul 2007 10:15:43 -0500
> "Steve French (smfltc)" <smfltc at us.ibm.com> wrote:
> 
> > > One test that fails is lock test #10.
> > ...
> > > fcntl(3, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=3}) = 0
> > > fcntl(3, F_SETLK, {type=F_UNLCK, whence=SEEK_SET, start=1, len=1}) = 0
> > >
> > > ...but when I look at packet traces, I only see the first request go
> > > out on the wire. 
> > 
> > Jeremy has done some good talks on posix byte range locking vs. Windows
> > locking but what you are seeing is that overlapping posix locks are merged 
> > and a lock can be split by an unlock of part of the locked range, while 
> > Windows locks stack on top of each other, and the unlock is expected to
> > match the lock.  Perhaps a way to handle
> > 
> > lock bytes 1 through 3
> > unlock byte 2
> > would be to do
> > 
> > cifs lock bytes 1 through 3
> > cifs lock 1, cifs lock 3
> > unlock bytes 1 through 3
> > 
> > It would be fairly easy to emulate in lines 768 through 781 (current
> > mainline cifs) of fs/cifs/file.c   The current algorith unlocks the
> > stored (windows/cifs locks) that are within the lock request.
> > 
> 
> I started having a look at this scheme today, and hacked up a rough
> implementation of the above logic. The problem I'm seeing is that the
> overlapping lock requests are refused with STATUS_LOCK_NOT_GRANTED. I'm
> presuming that the server (samba 3.0.25b) is refusing them since the
> range is already considered to be locked.
> 
> To make this work, I do I need to make the original lock be shared
> so that overlapping locks will work? If so, that might be a bit racy...

This won't work. You can't overlap existing locks in CIFS. Actually
you can but it's a bit complicated and in no way POSIX-friendly :-).

Bug me if you need more details.

Jeremy.


More information about the linux-cifs-client mailing list