Revert "smbd: Move oplock/sharemode ops into one place"
authorVolker Lendecke <vl@samba.org>
Thu, 24 Oct 2013 18:53:36 +0000 (20:53 +0200)
committerDavid Disseldorp <ddiss@samba.org>
Fri, 25 Oct 2013 12:22:20 +0000 (14:22 +0200)
This reverts commit 7b70fa18734d9ceb020fe3e5d4cc0c26cd27a484.

This is a change in behaviour which needs much further investigation
and testing.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: David Disseldorp <ddiss@samba.org>
Autobuild-User(master): David Disseldorp <ddiss@samba.org>
Autobuild-Date(master): Fri Oct 25 14:22:20 CEST 2013 on sn-devel-104

source3/smbd/open.c

index 28c2c1c844804c900f66c3f6f7b66ff850d70cf4..4db673acd33f42d86fa38fe38db6c71ac5d36482 100644 (file)
@@ -1435,6 +1435,13 @@ static void grant_fsp_oplock_type(files_struct *fsp,
                fsp->oplock_type = NO_OPLOCK;
        }
 
+       if (is_stat_open(fsp->access_mask)) {
+               /* Leave the value already set. */
+               DEBUG(10,("grant_fsp_oplock_type: oplock type 0x%x on file %s\n",
+                       fsp->oplock_type, fsp_str_dbg(fsp)));
+               return;
+       }
+
        got_level2_oplock = false;
        got_a_none_oplock = false;
 
@@ -2610,6 +2617,8 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
                return status;
        }
 
+       grant_fsp_oplock_type(fsp, lck, oplock_request);
+
        /*
         * We have the share entry *locked*.....
         */
@@ -2671,7 +2680,7 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
        if (file_existed) {
                /* stat opens on existing files don't get oplocks. */
                if (is_stat_open(open_access_mask)) {
-                       oplock_request = NO_OPLOCK;
+                       fsp->oplock_type = NO_OPLOCK;
                }
        }
 
@@ -2694,8 +2703,6 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
         * file structs.
         */
 
-       grant_fsp_oplock_type(fsp, lck, oplock_request);
-
        status = set_file_oplock(fsp);
        if (!NT_STATUS_IS_OK(status)) {
                /*