smbd: Use MSG_SMB_BREAK_REQUEST for async l2 breaks
authorVolker Lendecke <vl@samba.org>
Tue, 22 Oct 2013 11:33:42 +0000 (11:33 +0000)
committerStefan Metzmacher <metze@samba.org>
Wed, 23 Oct 2013 10:11:53 +0000 (12:11 +0200)
Now that we transmit the level we want to break to via the msg.op_type
we can unify MSG_SMB_BREAK_REQUEST and MSG_SMB_ASYNC_LEVEL2_BREAK and
thus simplify the code a bit.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source3/smbd/oplock.c

index f1b89b4650bf7802d9898c42f9a8aa3b5ed4b34c..3eaf1268b87382f35f323dafeb3709fa97c49e8b 100644 (file)
@@ -577,8 +577,14 @@ static void process_oplock_break_message(struct messaging_context *msg_ctx,
                        OPLOCKLEVEL_II : OPLOCKLEVEL_NONE);
        }
 
+       if ((fsp->oplock_type == LEVEL_II_OPLOCK) && (break_to == NO_OPLOCK)) {
+               /*
+                * This is an async break without a reply and thus no timeout
+                */
+               remove_oplock(fsp);
+               return;
+       }
        fsp->sent_oplock_break = break_to_level2 ? LEVEL_II_BREAK_SENT:BREAK_TO_NONE_SENT;
-
        add_oplock_timeout_handler(fsp);
 }
 
@@ -767,9 +773,11 @@ static void do_break_to_none(struct tevent_context *ctx,
                }
 
                share_mode_entry_to_message(msg, share_entry);
+               /* Overload entry->op_type */
+               SSVAL(msg,OP_BREAK_MSG_OP_TYPE_OFFSET, NO_OPLOCK);
 
                messaging_send_buf(state->sconn->msg_ctx, share_entry->pid,
-                                  MSG_SMB_ASYNC_LEVEL2_BREAK,
+                                  MSG_SMB_BREAK_REQUEST,
                                   (uint8 *)msg, sizeof(msg));
        }