]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: Add share mode flags
authorVolker Lendecke <vl@samba.org>
Fri, 9 Aug 2019 14:27:48 +0000 (16:27 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 17 Sep 2019 22:49:39 +0000 (22:49 +0000)
This will contain a summary of the "most restrictive" share mode and
lease, i.e. intersection of all share_access entries and the union of
all access_mask and leases in the share mode array. This way
open_mode_check in the non-conflicting case will only have to look at
the summary and not walk the share mode array.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/librpc/idl/open_files.idl
source3/locking/share_mode_lock.c
source3/smbd/open.c
source3/smbd/oplock.c

index e1c8a01afd3a8d390294a12fa7f499c7177f94fe..d3e537a9d4281da4b7e8c191ce85c86470e023f5 100644 (file)
@@ -41,7 +41,15 @@ interface open_files
        } delete_token;
 
        typedef [public,bitmap16bit] bitmap {
-               SHARE_MODE_HAS_READ_LEASE       = 0x01
+               SHARE_MODE_SHARE_DELETE         = 0x100,
+               SHARE_MODE_SHARE_WRITE          = 0x080,
+               SHARE_MODE_SHARE_READ           = 0x040,
+               SHARE_MODE_ACCESS_DELETE        = 0x020,
+               SHARE_MODE_ACCESS_WRITE         = 0x010,
+               SHARE_MODE_ACCESS_READ          = 0x008,
+               SHARE_MODE_LEASE_HANDLE         = 0x004,
+               SHARE_MODE_LEASE_WRITE          = 0x002,
+               SHARE_MODE_LEASE_READ           = 0x001
        } share_mode_flags;
 
        typedef [public] struct {
index 3c91a25948d93b9fdf7efd22fa56dfa2fb1c362e..abd911f4be2b39e3ec4283d7216517d84089fadb 100644 (file)
@@ -275,7 +275,7 @@ bool file_has_read_lease(struct files_struct *fsp)
                return true;
        }
 
-       return (fsp->share_mode_flags & SHARE_MODE_HAS_READ_LEASE) != 0;
+       return (fsp->share_mode_flags & SHARE_MODE_LEASE_READ) != 0;
 }
 
 static int share_mode_data_nofree_destructor(struct share_mode_data *d)
@@ -2005,7 +2005,7 @@ bool downgrade_share_oplock(struct share_mode_lock *lck, files_struct *fsp)
                return false;
        }
 
-       lck->data->flags |= SHARE_MODE_HAS_READ_LEASE;
+       lck->data->flags |= SHARE_MODE_LEASE_READ;
        lck->data->modified = true;
 
        return true;
index d9146f0582d0a5ab23312c652fdf1887b9e74b8d..bb497adbd69b58ffee923bccae44bafcd845188f 100644 (file)
@@ -2417,7 +2417,7 @@ grant:
        }
 
        if (granted & SMB2_LEASE_READ) {
-               lck->data->flags |= SHARE_MODE_HAS_READ_LEASE;
+               lck->data->flags |= SHARE_MODE_LEASE_READ;
        }
 
        DBG_DEBUG("oplock type 0x%x on file %s\n",
index 44aeaf48a63c3a2dda1196f0f9ff6afd0c66ac8f..b3da84b126903b67ccb1d527a51cb32863a73ed2 100644 (file)
@@ -1319,7 +1319,7 @@ static void contend_level2_oplocks_begin_default(files_struct *fsp,
                 * Lazy update here. It might be that the read lease
                 * has gone in the meantime.
                 */
-               d->flags &= ~SHARE_MODE_HAS_READ_LEASE;
+               d->flags &= ~SHARE_MODE_LEASE_READ;
                d->modified = true;
        }