⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlm_internal.h

📁 linux 内核源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -