r22154: Make struct smbdb_ctx an opaque pointer so users of the API
[sfrench/samba-autobuild/.git] / source / include / locking.h
index 9e70411fa66649b125645002547a1c3f8c270c4b..4b3b10d736768fc1c6971a50e1eac0239fe18823 100644 (file)
 #define _LOCKING_H
 
 /* passed to br lock code - the UNLOCK_LOCK should never be stored into the tdb
-   and is used in calculating POSIX unlock ranges only. */
+   and is used in calculating POSIX unlock ranges only. We differentiate between
+   PENDING read and write locks to allow posix lock downgrades to trigger a lock
+   re-evaluation. */
 
-enum brl_type {READ_LOCK, WRITE_LOCK, PENDING_LOCK, UNLOCK_LOCK};
+enum brl_type {READ_LOCK, WRITE_LOCK, PENDING_READ_LOCK, PENDING_WRITE_LOCK, UNLOCK_LOCK};
 enum brl_flavour {WINDOWS_LOCK = 0, POSIX_LOCK = 1};
 
+#define IS_PENDING_LOCK(type) ((type) == PENDING_READ_LOCK || (type) == PENDING_WRITE_LOCK)
+
 /* This contains elements that differentiate locks. The smbpid is a
    client supplied pid, and is essentially the locking context for
    this client */
@@ -51,6 +55,7 @@ struct byte_range_lock {
        struct files_struct *fsp;
        unsigned int num_locks;
        BOOL modified;
+       BOOL read_only;
        struct lock_key key;
        void *lock_data;
 };