00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _LOCKING_H
00023 #define _LOCKING_H
00024
00025
00026
00027
00028
00029
00030 enum brl_type {READ_LOCK, WRITE_LOCK, PENDING_READ_LOCK, PENDING_WRITE_LOCK, UNLOCK_LOCK};
00031 enum brl_flavour {WINDOWS_LOCK = 0, POSIX_LOCK = 1};
00032
00033 #define IS_PENDING_LOCK(type) ((type) == PENDING_READ_LOCK || (type) == PENDING_WRITE_LOCK)
00034
00035
00036
00037
00038
00039 struct lock_context {
00040 uint32 smbpid;
00041 uint16 tid;
00042 struct process_id pid;
00043 };
00044
00045
00046
00047 struct lock_key {
00048 SMB_DEV_T device;
00049 SMB_INO_T inode;
00050 };
00051
00052 struct files_struct;
00053
00054 struct byte_range_lock {
00055 struct files_struct *fsp;
00056 unsigned int num_locks;
00057 BOOL modified;
00058 BOOL read_only;
00059 struct lock_key key;
00060 void *lock_data;
00061 };
00062
00063 #define BRLOCK_FN_CAST() \
00064 void (*)(SMB_DEV_T dev, SMB_INO_T ino, struct process_id pid, \
00065 enum brl_type lock_type, \
00066 enum brl_flavour lock_flav, \
00067 br_off start, br_off size)
00068
00069 #define BRLOCK_FN(fn) \
00070 void (*fn)(SMB_DEV_T dev, SMB_INO_T ino, struct process_id pid, \
00071 enum brl_type lock_type, \
00072 enum brl_flavour lock_flav, \
00073 br_off start, br_off size)
00074
00075
00076
00077
00078
00079
00080 struct lock_struct {
00081 struct lock_context context;
00082 br_off start;
00083 br_off size;
00084 uint16 fnum;
00085 enum brl_type lock_type;
00086 enum brl_flavour lock_flav;
00087 };
00088
00089 #endif