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

📄 dlmcommon.h

📁 LINUX 2.6.17.4的源码
💻 H
📖 第 1 页 / 共 2 页
字号:
{	u8 master;	u8 lockname_len;	u8 num_locks;    // locks sent in this structure	u8 flags;	__be32 total_locks; // locks to be sent for this migration cookie	__be64 mig_cookie;  // cookie for this lockres migration			 // or zero if not needed	// 16 bytes	u8 lockname[DLM_LOCKID_NAME_MAX];	// 48 bytes	u8 lvb[DLM_LVB_LEN];	// 112 bytes	struct dlm_migratable_lock ml[0];  // 16 bytes each, begins at byte 112};#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;};struct dlm_query_join_request{	u8 node_idx;	u8 pad1[2];	u8 name_len;	u8 domain[O2NM_MAX_NAME_LEN];};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;	__be16 pad1;	__be32 pad2;};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);int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data);int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *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 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);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);void dlm_purge_lockres(struct dlm_ctxt *dlm,		       struct dlm_lock_resource *lockres);void dlm_lockres_get(struct dlm_lock_resource *res);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(struct dlm_ctxt *dlm,						const char *name,						unsigned int len);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 flags);struct dlm_lock_resource *dlm_new_lockres(struct dlm_ctxt *dlm,					  const char *name,					  unsigned int namelen);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_lockres_is_dirty(struct dlm_ctxt *dlm, struct dlm_lock_resource *res);int dlm_migrate_lockres(struct dlm_ctxt *dlm,			struct dlm_lock_resource *res,			u8 target);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);int dlm_assert_master_handler(struct o2net_msg *msg, u32 len, void *data);int dlm_migrate_request_handler(struct o2net_msg *msg, u32 len, void *data);int dlm_mig_lockres_handler(struct o2net_msg *msg, u32 len, void *data);int dlm_master_requery_handler(struct o2net_msg *msg, u32 len, void *data);int dlm_request_all_locks_handler(struct o2net_msg *msg, u32 len, void *data);int dlm_reco_data_done_handler(struct o2net_msg *msg, u32 len, void *data);int dlm_begin_reco_handler(struct o2net_msg *msg, u32 len, void *data);int dlm_finalize_reco_handler(struct o2net_msg *msg, u32 len, void *data);int dlm_do_master_requery(struct dlm_ctxt *dlm, struct dlm_lock_resource *res,			  u8 nodenum, u8 *real_master);int dlm_lockres_master_requery(struct dlm_ctxt *dlm,			       struct dlm_lock_resource *res, 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);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);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 + -