📄 dlm_internal.h
字号:
#define R_MASTER 1 /* only return rsb if it's a master */#define R_CREATE 2 /* create/add rsb if not found *//* rsb_flags */enum rsb_flags { RSB_MASTER_UNCERTAIN, RSB_VALNOTVALID, RSB_VALNOTVALID_PREV, RSB_NEW_MASTER, RSB_NEW_MASTER2, RSB_RECOVER_CONVERT, RSB_LOCKS_PURGED,};static inline void rsb_set_flag(struct dlm_rsb *r, enum rsb_flags flag){ __set_bit(flag, &r->res_flags);}static inline void rsb_clear_flag(struct dlm_rsb *r, enum rsb_flags flag){ __clear_bit(flag, &r->res_flags);}static inline int rsb_flag(struct dlm_rsb *r, enum rsb_flags flag){ return test_bit(flag, &r->res_flags);}/* dlm_header is first element of all structs sent between nodes */#define DLM_HEADER_MAJOR 0x00030000#define DLM_HEADER_MINOR 0x00000000#define DLM_MSG 1#define DLM_RCOM 2struct dlm_header { uint32_t h_version; uint32_t h_lockspace; uint32_t h_nodeid; /* nodeid of sender */ uint16_t h_length; uint8_t h_cmd; /* DLM_MSG, DLM_RCOM */ uint8_t h_pad;};#define DLM_MSG_REQUEST 1#define DLM_MSG_CONVERT 2#define DLM_MSG_UNLOCK 3#define DLM_MSG_CANCEL 4#define DLM_MSG_REQUEST_REPLY 5#define DLM_MSG_CONVERT_REPLY 6#define DLM_MSG_UNLOCK_REPLY 7#define DLM_MSG_CANCEL_REPLY 8#define DLM_MSG_GRANT 9#define DLM_MSG_BAST 10#define DLM_MSG_LOOKUP 11#define DLM_MSG_REMOVE 12#define DLM_MSG_LOOKUP_REPLY 13#define DLM_MSG_PURGE 14struct dlm_message { struct dlm_header m_header; uint32_t m_type; /* DLM_MSG_ */ uint32_t m_nodeid; uint32_t m_pid; uint32_t m_lkid; /* lkid on sender */ uint32_t m_remid; /* lkid on receiver */ uint32_t m_parent_lkid; uint32_t m_parent_remid; uint32_t m_exflags; uint32_t m_sbflags; uint32_t m_flags; uint32_t m_lvbseq; uint32_t m_hash; int m_status; int m_grmode; int m_rqmode; int m_bastmode; int m_asts; int m_result; /* 0 or -EXXX */ char m_extra[0]; /* name or lvb */};#define DLM_RS_NODES 0x00000001#define DLM_RS_NODES_ALL 0x00000002#define DLM_RS_DIR 0x00000004#define DLM_RS_DIR_ALL 0x00000008#define DLM_RS_LOCKS 0x00000010#define DLM_RS_LOCKS_ALL 0x00000020#define DLM_RS_DONE 0x00000040#define DLM_RS_DONE_ALL 0x00000080#define DLM_RCOM_STATUS 1#define DLM_RCOM_NAMES 2#define DLM_RCOM_LOOKUP 3#define DLM_RCOM_LOCK 4#define DLM_RCOM_STATUS_REPLY 5#define DLM_RCOM_NAMES_REPLY 6#define DLM_RCOM_LOOKUP_REPLY 7#define DLM_RCOM_LOCK_REPLY 8struct dlm_rcom { struct dlm_header rc_header; uint32_t rc_type; /* DLM_RCOM_ */ int rc_result; /* multi-purpose */ uint64_t rc_id; /* match reply with request */ uint64_t rc_seq; /* sender's ls_recover_seq */ uint64_t rc_seq_reply; /* remote ls_recover_seq */ char rc_buf[0];};struct rcom_config { uint32_t rf_lvblen; uint32_t rf_lsflags; uint64_t rf_unused;};struct rcom_lock { uint32_t rl_ownpid; uint32_t rl_lkid; uint32_t rl_remid; uint32_t rl_parent_lkid; uint32_t rl_parent_remid; uint32_t rl_exflags; uint32_t rl_flags; uint32_t rl_lvbseq; int rl_result; int8_t rl_rqmode; int8_t rl_grmode; int8_t rl_status; int8_t rl_asts; uint16_t rl_wait_type; uint16_t rl_namelen; char rl_name[DLM_RESNAME_MAXLEN]; char rl_lvb[0];};struct dlm_ls { struct list_head ls_list; /* list of lockspaces */ dlm_lockspace_t *ls_local_handle; uint32_t ls_global_id; /* global unique lockspace ID */ uint32_t ls_exflags; int ls_lvblen; int ls_count; /* reference count */ unsigned long ls_flags; /* LSFL_ */ struct kobject ls_kobj; struct dlm_rsbtable *ls_rsbtbl; uint32_t ls_rsbtbl_size; struct dlm_lkbtable *ls_lkbtbl; uint32_t ls_lkbtbl_size; struct dlm_dirtable *ls_dirtbl; uint32_t ls_dirtbl_size; struct mutex ls_waiters_mutex; struct list_head ls_waiters; /* lkbs needing a reply */ struct mutex ls_orphans_mutex; struct list_head ls_orphans; struct mutex ls_timeout_mutex; struct list_head ls_timeout; struct list_head ls_nodes; /* current nodes in ls */ struct list_head ls_nodes_gone; /* dead node list, recovery */ int ls_num_nodes; /* number of nodes in ls */ int ls_low_nodeid; int ls_total_weight; int *ls_node_array; gfp_t ls_allocation; struct dlm_rsb ls_stub_rsb; /* for returning errors */ struct dlm_lkb ls_stub_lkb; /* for returning errors */ struct dlm_message ls_stub_ms; /* for faking a reply */ struct dentry *ls_debug_rsb_dentry; /* debugfs */ struct dentry *ls_debug_waiters_dentry; /* debugfs */ struct dentry *ls_debug_locks_dentry; /* debugfs */ wait_queue_head_t ls_uevent_wait; /* user part of join/leave */ int ls_uevent_result; struct completion ls_members_done; int ls_members_result; struct miscdevice ls_device; /* recovery related */ struct timer_list ls_timer; struct task_struct *ls_recoverd_task; struct mutex ls_recoverd_active; spinlock_t ls_recover_lock; unsigned long ls_recover_begin; /* jiffies timestamp */ uint32_t ls_recover_status; /* DLM_RS_ */ uint64_t ls_recover_seq; struct dlm_recover *ls_recover_args; struct rw_semaphore ls_in_recovery; /* block local requests */ struct rw_semaphore ls_recv_active; /* block dlm_recv */ struct list_head ls_requestqueue;/* queue remote requests */ struct mutex ls_requestqueue_mutex; char *ls_recover_buf; int ls_recover_nodeid; /* for debugging */ uint64_t ls_rcom_seq; spinlock_t ls_rcom_spin; struct list_head ls_recover_list; spinlock_t ls_recover_list_lock; int ls_recover_list_count; wait_queue_head_t ls_wait_general; struct mutex ls_clear_proc_locks; struct list_head ls_root_list; /* root resources */ struct rw_semaphore ls_root_sem; /* protect root_list */ int ls_namelen; char ls_name[1];};#define LSFL_WORK 0#define LSFL_RUNNING 1#define LSFL_RECOVERY_STOP 2#define LSFL_RCOM_READY 3#define LSFL_RCOM_WAIT 4#define LSFL_UEVENT_WAIT 5#define LSFL_TIMEWARN 6/* much of this is just saving user space pointers associated with the lock that we pass back to the user lib with an ast */struct dlm_user_args { struct dlm_user_proc *proc; /* each process that opens the lockspace device has private data (dlm_user_proc) on the struct file, the process's locks point back to it*/ struct dlm_lksb lksb; int old_mode; int update_user_lvb; struct dlm_lksb __user *user_lksb; void __user *castparam; void __user *castaddr; void __user *bastparam; void __user *bastaddr; uint64_t xid;};#define DLM_PROC_FLAGS_CLOSING 1#define DLM_PROC_FLAGS_COMPAT 2/* locks list is kept so we can remove all a process's locks when it exits (or orphan those that are persistent) */struct dlm_user_proc { dlm_lockspace_t *lockspace; unsigned long flags; /* DLM_PROC_FLAGS */ struct list_head asts; spinlock_t asts_spin; struct list_head locks; spinlock_t locks_spin; struct list_head unlocking; wait_queue_head_t wait;};static inline int dlm_locking_stopped(struct dlm_ls *ls){ return !test_bit(LSFL_RUNNING, &ls->ls_flags);}static inline int dlm_recovery_stopped(struct dlm_ls *ls){ return test_bit(LSFL_RECOVERY_STOP, &ls->ls_flags);}static inline int dlm_no_directory(struct dlm_ls *ls){ return (ls->ls_exflags & DLM_LSFL_NODIR) ? 1 : 0;}#endif /* __DLM_INTERNAL_DOT_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -