Author: jra Date: 2006-07-26 18:50:47 +0000 (Wed, 26 Jul 2006) New Revision: 64
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=linux-cifs-client&rev=64 Log: Correctly implement "slow" fcntl lock system call (for POSIX locks at least). What this does is add a new SendReceive varient, SendReceiveBlockingLock(), currently only used for POSIX blocking lock calls. Inside this varient it calls wait_event_interruptible() instead of wait_event(), which allows a signal to cause us to return. If we get a signal we cancel the lock at the server by sending an NT_CANCEL SMB request, then wait for the POSIX lock reply. We then return -ERESTARTSYS allowing the system call to be restarted. As I needed to reuse an existing mid (for the cancel) I changed the header_assemble() call to take a passed in Mid value, rather than having it always generate one itself. The remaining code change it to make SendReceiveBlockingLock handle cancelling Windows blocking locks. This will be by sending a LockingX call with LOCK_CANCEL before receiving the LockingX reply. Once this is done I think the "long wait" code (timeout > 2) code can be removed from SendReceive() and SendReceive2() as only blocking lock calls use this (if not I'll leave it in). Jeremy Modified: branches/linux-2.6-cifs-git-devel/fs/cifs/cifsproto.h branches/linux-2.6-cifs-git-devel/fs/cifs/cifssmb.c branches/linux-2.6-cifs-git-devel/fs/cifs/connect.c branches/linux-2.6-cifs-git-devel/fs/cifs/misc.c branches/linux-2.6-cifs-git-devel/fs/cifs/transport.c branches/linux-converged-for-old-kernels/fs/cifs/cifsproto.h branches/linux-converged-for-old-kernels/fs/cifs/cifssmb.c branches/linux-converged-for-old-kernels/fs/cifs/connect.c branches/linux-converged-for-old-kernels/fs/cifs/misc.c branches/linux-converged-for-old-kernels/fs/cifs/transport.c Changeset: Sorry, the patch is too large (829 lines) to include; please use WebSVN to see it! WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=linux-cifs-client&rev=64
