r22864: in SMB2 mode we need to cancel an existing lock with a conflicting lock
authorStefan Metzmacher <metze@samba.org>
Mon, 14 May 2007 17:56:00 +0000 (17:56 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:52:25 +0000 (14:52 -0500)
if they're on the same handle and the same range

metze
(This used to be commit 36384bb4a071dcc366ae1039bd0579f08b84e238)

source4/ntvfs/posix/pvfs_lock.c

index 4527cd3ed2ecb9fd571e4147076b4e9cd0ecf7df..9b5823e69e71f607b8608f0c2cb7751e1e0072e0 100644 (file)
@@ -69,8 +69,13 @@ static void pvfs_lock_async_failed(struct pvfs_state *pvfs,
                                   int i,
                                   NTSTATUS status)
 {
+       /* in SMB2 mode we also try to unlock failing lock */ 
+       if (req->ctx->protocol != PROTOCOL_SMB2) {
+               i--;
+       }
+
        /* undo the locks we just did */
-       for (i=i-1;i>=0;i--) {
+       for (;i>=0;i--) {
                brl_unlock(pvfs->brl_context,
                           f->brl_handle,
                           locks[i].pid,
@@ -377,8 +382,12 @@ NTSTATUS pvfs_lock(struct ntvfs_module_context *ntvfs,
                                DLIST_ADD(f->pending_list, pending);
                                return NT_STATUS_OK;
                        }
+                       /* in SMB2 mode we also try to unlock failing lock */ 
+                       if (req->ctx->protocol != PROTOCOL_SMB2) {
+                               i--;
+                       }
                        /* undo the locks we just did */
-                       for (i=i-1;i>=0;i--) {
+                       for (;i>=0;i--) {
                                brl_unlock(pvfs->brl_context,
                                           f->brl_handle,
                                           locks[i].pid,