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

📄 dlmcommon.h

📁 linux 内核源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#define DLM_MIG_LOCKRES_MAX_LEN  \	(sizeof(struct dlm_migratable_lockres) + \	 (sizeof(struct dlm_migratable_lock) * \	  DLM_MAX_MIGRATABLE_LOCKS) )/* from above, 128 bytes * for some undetermined future use */#define DLM_MIG_LOCKRES_RESERVED   (NET_MAX_PAYLOAD_BYTES - \				    DLM_MIG_LOCKRES_MAX_LEN)struct dlm_create_lock{	__be64 cookie;	__be32 flags;	u8 pad1;	u8 node_idx;	s8 requested_type;	u8 namelen;	u8 name[O2NM_MAX_NAME_LEN];};struct dlm_convert_lock{	__be64 cookie;	__be32 flags;	u8 pad1;	u8 node_idx;	s8 requested_type;	u8 namelen;	u8 name[O2NM_MAX_NAME_LEN];	s8 lvb[0];};#define DLM_CONVERT_LOCK_MAX_LEN  (sizeof(struct dlm_convert_lock)+DLM_LVB_LEN)struct dlm_unlock_lock{	__be64 cookie;	__be32 flags;	__be16 pad1;	u8 node_idx;	u8 namelen;	u8 name[O2NM_MAX_NAME_LEN];	s8 lvb[0];};#define DLM_UNLOCK_LOCK_MAX_LEN  (sizeof(struct dlm_unlock_lock)+DLM_LVB_LEN)struct dlm_proxy_ast{	__be64 cookie;	__be32 flags;	u8 node_idx;	u8 type;	u8 blocked_type;	u8 namelen;	u8 name[O2NM_MAX_NAME_LEN];	s8 lvb[0];};#define DLM_PROXY_AST_MAX_LEN  (sizeof(struct dlm_proxy_ast)+DLM_LVB_LEN)#define DLM_MOD_KEY (0x666c6172)enum dlm_query_join_response {	JOIN_DISALLOW = 0,	JOIN_OK,	JOIN_OK_NO_MAP,};struct dlm_lock_request{	u8 node_idx;	u8 dead_node;	__be16 pad1;	__be32 pad2;};struct dlm_reco_data_done{	u8 node_idx;	u8 dead_node;	__be16 pad1;	__be32 pad2;	/* unused for now */	/* eventually we can use this to attempt	 * lvb recovery based on each node's info */	u8 reco_lvb[DLM_LVB_LEN];};struct dlm_begin_reco{	u8 node_idx;	u8 dead_node;	__be16 pad1;	__be32 pad2;};#define BITS_PER_BYTE 8#define BITS_TO_BYTES(bits) (((bits)+BITS_PER_BYTE-1)/BITS_PER_BYTE)struct dlm_query_join_request{	u8 node_idx;	u8 pad1[2];	u8 name_len;	u8 domain[O2NM_MAX_NAME_LEN];	u8 node_map[BITS_TO_BYTES(O2NM_MAX_NODES)];};struct dlm_assert_joined{	u8 node_idx;	u8 pad1[2];	u8 name_len;	u8 domain[O2NM_MAX_NAME_LEN];};struct dlm_cancel_join{	u8 node_idx;	u8 pad1[2];	u8 name_len;	u8 domain[O2NM_MAX_NAME_LEN];};struct dlm_exit_domain{	u8 node_idx;	u8 pad1[3];};struct dlm_finalize_reco{	u8 node_idx;	u8 dead_node;	u8 flags;	u8 pad1;	__be32 pad2;};struct dlm_deref_lockres{	u32 pad1;	u16 pad2;	u8 node_idx;	u8 namelen;	u8 name[O2NM_MAX_NAME_LEN];};static inline enum dlm_status__dlm_lockres_state_to_status(struct dlm_lock_resource *res){	enum dlm_status status = DLM_NORMAL;	assert_spin_locked(&res->spinlock);	if (res->state & DLM_LOCK_RES_RECOVERING)		status = DLM_RECOVERING;	else if (res->state & DLM_LOCK_RES_MIGRATING)		status = DLM_MIGRATING;	else if (res->state & DLM_LOCK_RES_IN_PROGRESS)		status = DLM_FORWARD;	return status;}static inline u8 dlm_get_lock_cookie_node(u64 cookie){	u8 ret;	cookie >>= 56;	ret = (u8)(cookie & 0xffULL);	return ret;}static inline unsigned long long dlm_get_lock_cookie_seq(u64 cookie){	unsigned long long ret;	ret = ((unsigned long long)cookie) & 0x00ffffffffffffffULL;	return ret;}struct dlm_lock * dlm_new_lock(int type, u8 node, u64 cookie,			       struct dlm_lockstatus *lksb);void dlm_lock_get(struct dlm_lock *lock);void dlm_lock_put(struct dlm_lock *lock);void dlm_lock_attach_lockres(struct dlm_lock *lock,			     struct dlm_lock_resource *res);int dlm_create_lock_handler(struct o2net_msg *msg, u32 len, void *data,			    void **ret_data);int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data,			     void **ret_data);int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *data,			  void **ret_data);void dlm_revert_pending_convert(struct dlm_lock_resource *res,				struct dlm_lock *lock);void dlm_revert_pending_lock(struct dlm_lock_resource *res,			     struct dlm_lock *lock);int dlm_unlock_lock_handler(struct o2net_msg *msg, u32 len, void *data,			    void **ret_data);void dlm_commit_pending_cancel(struct dlm_lock_resource *res,			       struct dlm_lock *lock);void dlm_commit_pending_unlock(struct dlm_lock_resource *res,			       struct dlm_lock *lock);int dlm_launch_thread(struct dlm_ctxt *dlm);void dlm_complete_thread(struct dlm_ctxt *dlm);int dlm_launch_recovery_thread(struct dlm_ctxt *dlm);void dlm_complete_recovery_thread(struct dlm_ctxt *dlm);void dlm_wait_for_recovery(struct dlm_ctxt *dlm);void dlm_kick_recovery_thread(struct dlm_ctxt *dlm);int dlm_is_node_dead(struct dlm_ctxt *dlm, u8 node);int dlm_wait_for_node_death(struct dlm_ctxt *dlm, u8 node, int timeout);int dlm_wait_for_node_recovery(struct dlm_ctxt *dlm, u8 node, int timeout);void dlm_put(struct dlm_ctxt *dlm);struct dlm_ctxt *dlm_grab(struct dlm_ctxt *dlm);int dlm_domain_fully_joined(struct dlm_ctxt *dlm);void __dlm_lockres_calc_usage(struct dlm_ctxt *dlm,			      struct dlm_lock_resource *res);void dlm_lockres_calc_usage(struct dlm_ctxt *dlm,			    struct dlm_lock_resource *res);static inline void dlm_lockres_get(struct dlm_lock_resource *res){	/* This is called on every lookup, so it might be worth	 * inlining. */	kref_get(&res->refs);}void dlm_lockres_put(struct dlm_lock_resource *res);void __dlm_unhash_lockres(struct dlm_lock_resource *res);void __dlm_insert_lockres(struct dlm_ctxt *dlm,			  struct dlm_lock_resource *res);struct dlm_lock_resource * __dlm_lookup_lockres_full(struct dlm_ctxt *dlm,						     const char *name,						     unsigned int len,						     unsigned int hash);struct dlm_lock_resource * __dlm_lookup_lockres(struct dlm_ctxt *dlm,						const char *name,						unsigned int len,						unsigned int hash);struct dlm_lock_resource * dlm_lookup_lockres(struct dlm_ctxt *dlm,					      const char *name,					      unsigned int len);int dlm_is_host_down(int errno);void dlm_change_lockres_owner(struct dlm_ctxt *dlm,			      struct dlm_lock_resource *res,			      u8 owner);struct dlm_lock_resource * dlm_get_lock_resource(struct dlm_ctxt *dlm,						 const char *lockid,						 int namelen,						 int flags);struct dlm_lock_resource *dlm_new_lockres(struct dlm_ctxt *dlm,					  const char *name,					  unsigned int namelen);#define dlm_lockres_set_refmap_bit(bit,res)  \	__dlm_lockres_set_refmap_bit(bit,res,__FILE__,__LINE__)#define dlm_lockres_clear_refmap_bit(bit,res)  \	__dlm_lockres_clear_refmap_bit(bit,res,__FILE__,__LINE__)static inline void __dlm_lockres_set_refmap_bit(int bit,						struct dlm_lock_resource *res,						const char *file,						int line){	//printk("%s:%d:%.*s: setting bit %d\n", file, line,	//     res->lockname.len, res->lockname.name, bit);	set_bit(bit, res->refmap);}static inline void __dlm_lockres_clear_refmap_bit(int bit,						  struct dlm_lock_resource *res,						  const char *file,						  int line){	//printk("%s:%d:%.*s: clearing bit %d\n", file, line,	//     res->lockname.len, res->lockname.name, bit);	clear_bit(bit, res->refmap);}void __dlm_lockres_drop_inflight_ref(struct dlm_ctxt *dlm,				   struct dlm_lock_resource *res,				   const char *file,				   int line);void __dlm_lockres_grab_inflight_ref(struct dlm_ctxt *dlm,				   struct dlm_lock_resource *res,				   int new_lockres,				   const char *file,				   int line);#define dlm_lockres_drop_inflight_ref(d,r)  \	__dlm_lockres_drop_inflight_ref(d,r,__FILE__,__LINE__)#define dlm_lockres_grab_inflight_ref(d,r)  \	__dlm_lockres_grab_inflight_ref(d,r,0,__FILE__,__LINE__)#define dlm_lockres_grab_inflight_ref_new(d,r)  \	__dlm_lockres_grab_inflight_ref(d,r,1,__FILE__,__LINE__)void dlm_queue_ast(struct dlm_ctxt *dlm, struct dlm_lock *lock);void dlm_queue_bast(struct dlm_ctxt *dlm, struct dlm_lock *lock);void dlm_do_local_ast(struct dlm_ctxt *dlm,		      struct dlm_lock_resource *res,		      struct dlm_lock *lock);int dlm_do_remote_ast(struct dlm_ctxt *dlm,		      struct dlm_lock_resource *res,		      struct dlm_lock *lock);void dlm_do_local_bast(struct dlm_ctxt *dlm,		       struct dlm_lock_resource *res,		       struct dlm_lock *lock,		       int blocked_type);int dlm_send_proxy_ast_msg(struct dlm_ctxt *dlm,			   struct dlm_lock_resource *res,			   struct dlm_lock *lock,			   int msg_type,			   int blocked_type, int flags);static inline int dlm_send_proxy_bast(struct dlm_ctxt *dlm,				      struct dlm_lock_resource *res,				      struct dlm_lock *lock,				      int blocked_type){	return dlm_send_proxy_ast_msg(dlm, res, lock, DLM_BAST,				      blocked_type, 0);}static inline int dlm_send_proxy_ast(struct dlm_ctxt *dlm,				     struct dlm_lock_resource *res,				     struct dlm_lock *lock,				     int flags){	return dlm_send_proxy_ast_msg(dlm, res, lock, DLM_AST,				      0, flags);}void dlm_print_one_lock_resource(struct dlm_lock_resource *res);void __dlm_print_one_lock_resource(struct dlm_lock_resource *res);u8 dlm_nm_this_node(struct dlm_ctxt *dlm);void dlm_kick_thread(struct dlm_ctxt *dlm, struct dlm_lock_resource *res);void __dlm_dirty_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *res);int dlm_nm_init(struct dlm_ctxt *dlm);int dlm_heartbeat_init(struct dlm_ctxt *dlm);void dlm_hb_node_down_cb(struct o2nm_node *node, int idx, void *data);void dlm_hb_node_up_cb(struct o2nm_node *node, int idx, void *data);int dlm_empty_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *res);int dlm_finish_migration(struct dlm_ctxt *dlm,			 struct dlm_lock_resource *res,			 u8 old_master);void dlm_lockres_release_ast(struct dlm_ctxt *dlm,			     struct dlm_lock_resource *res);void __dlm_lockres_reserve_ast(struct dlm_lock_resource *res);int dlm_master_request_handler(struct o2net_msg *msg, u32 len, void *data,			       void **ret_data);int dlm_assert_master_handler(struct o2net_msg *msg, u32 len, void *data,			      void **ret_data);void dlm_assert_master_post_handler(int status, void *data, void *ret_data);int dlm_deref_lockres_handler(struct o2net_msg *msg, u32 len, void *data,			      void **ret_data);int dlm_migrate_request_handler(struct o2net_msg *msg, u32 len, void *data,				void **ret_data);int dlm_mig_lockres_handler(struct o2net_msg *msg, u32 len, void *data,			    void **ret_data);int dlm_master_requery_handler(struct o2net_msg *msg, u32 len, void *data,			       void **ret_data);int dlm_request_all_locks_handler(struct o2net_msg *msg, u32 len, void *data,				  void **ret_data);int dlm_reco_data_done_handler(struct o2net_msg *msg, u32 len, void *data,			       void **ret_data);int dlm_begin_reco_handler(struct o2net_msg *msg, u32 len, void *data,			   void **ret_data);int dlm_finalize_reco_handler(struct o2net_msg *msg, u32 len, void *data,			      void **ret_data);int dlm_do_master_requery(struct dlm_ctxt *dlm, struct dlm_lock_resource *res,			  u8 nodenum, u8 *real_master);int dlm_dispatch_assert_master(struct dlm_ctxt *dlm,			       struct dlm_lock_resource *res,			       int ignore_higher,			       u8 request_from,			       u32 flags);int dlm_send_one_lockres(struct dlm_ctxt *dlm,			 struct dlm_lock_resource *res,			 struct dlm_migratable_lockres *mres,			 u8 send_to,			 u8 flags);void dlm_move_lockres_to_recovery_list(struct dlm_ctxt *dlm,				       struct dlm_lock_resource *res);/* will exit holding res->spinlock, but may drop in function */void __dlm_wait_on_lockres_flags(struct dlm_lock_resource *res, int flags);void __dlm_wait_on_lockres_flags_set(struct dlm_lock_resource *res, int flags);/* will exit holding res->spinlock, but may drop in function */static inline void __dlm_wait_on_lockres(struct dlm_lock_resource *res){	__dlm_wait_on_lockres_flags(res, (DLM_LOCK_RES_IN_PROGRESS|				    	  DLM_LOCK_RES_RECOVERING|					  DLM_LOCK_RES_MIGRATING));}int dlm_init_mle_cache(void);void dlm_destroy_mle_cache(void);void dlm_hb_event_notify_attached(struct dlm_ctxt *dlm, int idx, int node_up);int dlm_drop_lockres_ref(struct dlm_ctxt *dlm,			 struct dlm_lock_resource *res);void dlm_clean_master_list(struct dlm_ctxt *dlm,			   u8 dead_node);int dlm_lock_basts_flushed(struct dlm_ctxt *dlm, struct dlm_lock *lock);int __dlm_lockres_has_locks(struct dlm_lock_resource *res);int __dlm_lockres_unused(struct dlm_lock_resource *res);static inline const char * dlm_lock_mode_name(int mode){	switch (mode) {		case LKM_EXMODE:			return "EX";		case LKM_PRMODE:			return "PR";		case LKM_NLMODE:			return "NL";	}	return "UNKNOWN";}static inline int dlm_lock_compatible(int existing, int request){	/* NO_LOCK compatible with all */	if (request == LKM_NLMODE ||	    existing == LKM_NLMODE)		return 1;	/* EX incompatible with all non-NO_LOCK */	if (request == LKM_EXMODE)		return 0;	/* request must be PR, which is compatible with PR */	if (existing == LKM_PRMODE)		return 1;	return 0;}static inline int dlm_lock_on_list(struct list_head *head,				   struct dlm_lock *lock){	struct list_head *iter;	struct dlm_lock *tmplock;	list_for_each(iter, head) {		tmplock = list_entry(iter, struct dlm_lock, list);		if (tmplock == lock)			return 1;	}	return 0;}static inline enum dlm_status dlm_err_to_dlm_status(int err){	enum dlm_status ret;	if (err == -ENOMEM)		ret = DLM_SYSERR;	else if (err == -ETIMEDOUT || o2net_link_down(err, NULL))		ret = DLM_NOLOCKMGR;	else if (err == -EINVAL)		ret = DLM_BADPARAM;	else if (err == -ENAMETOOLONG)		ret = DLM_IVBUFLEN;	else		ret = DLM_BADARGS;	return ret;}static inline void dlm_node_iter_init(unsigned long *map,				      struct dlm_node_iter *iter){	memcpy(iter->node_map, map, sizeof(iter->node_map));	iter->curnode = -1;}static inline int dlm_node_iter_next(struct dlm_node_iter *iter){	int bit;	bit = find_next_bit(iter->node_map, O2NM_MAX_NODES, iter->curnode+1);	if (bit >= O2NM_MAX_NODES) {		iter->curnode = O2NM_MAX_NODES;		return -ENOENT;	}	iter->curnode = bit;	return bit;}#endif /* DLMCOMMON_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -