smbd: Slightly simplify delay_for_oplock()
authorVolker Lendecke <vl@samba.org>
Wed, 15 May 2019 16:23:27 +0000 (18:23 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 16 May 2019 07:59:52 +0000 (07:59 +0000)
We don't have to look at the leases.tdb record if it's our own lease.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Thu May 16 07:59:52 UTC 2019 on sn-devel-184

source3/smbd/open.c

index a2d564e48b373969ebaebb451dc71a55a88e1bbe..e9112dcfcf20b1b533ccbe696ef8d615c93776e5 100644 (file)
@@ -1871,6 +1871,18 @@ static bool delay_for_oplock(files_struct *fsp,
                if (e_is_lease) {
                        NTSTATUS status;
 
+                       if (lease != NULL) {
+                               bool our_lease = smb2_lease_equal(
+                                       fsp_client_guid(fsp),
+                                       &lease->lease_key,
+                                       &e->client_guid,
+                                       &e->lease_key);
+                               if (our_lease) {
+                                       DBG_DEBUG("Ignoring our own lease\n");
+                                       continue;
+                               }
+                       }
+
                        status = leases_db_get(
                                &e->client_guid,
                                &e->lease_key,
@@ -1905,18 +1917,6 @@ static bool delay_for_oplock(files_struct *fsp,
                           (unsigned)i, (unsigned)e_lease_type,
                           (unsigned)will_overwrite));
 
-               if (e_is_lease && lease != NULL) {
-                       bool ign;
-
-                       ign = smb2_lease_equal(fsp_client_guid(fsp),
-                                              &lease->lease_key,
-                                              &e->client_guid,
-                                              &e->lease_key);
-                       if (ign) {
-                               continue;
-                       }
-               }
-
                if ((e_lease_type & ~break_to) == 0) {
                        if (lease_is_breaking) {
                                delay = true;