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

📄 dlm_internal.h

📁 linux 内核源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************************************************************************************************  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.**  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.****  This copyrighted material is made available to anyone wishing to use,**  modify, copy, or redistribute it subject to the terms and conditions**  of the GNU General Public License v.2.***************************************************************************************************************************************************************/#ifndef __DLM_INTERNAL_DOT_H__#define __DLM_INTERNAL_DOT_H__/* * This is the main header file to be included in each DLM source file. */#include <linux/module.h>#include <linux/slab.h>#include <linux/sched.h>#include <linux/types.h>#include <linux/ctype.h>#include <linux/spinlock.h>#include <linux/vmalloc.h>#include <linux/list.h>#include <linux/errno.h>#include <linux/random.h>#include <linux/delay.h>#include <linux/socket.h>#include <linux/kthread.h>#include <linux/kobject.h>#include <linux/kref.h>#include <linux/kernel.h>#include <linux/jhash.h>#include <linux/miscdevice.h>#include <linux/mutex.h>#include <asm/semaphore.h>#include <asm/uaccess.h>#include <linux/dlm.h>#include "config.h"#define DLM_LOCKSPACE_LEN	64/* Size of the temp buffer midcomms allocates on the stack.   We try to make this large enough so most messages fit.   FIXME: should sctp make this unnecessary? */#define DLM_INBUF_LEN		148struct dlm_ls;struct dlm_lkb;struct dlm_rsb;struct dlm_member;struct dlm_lkbtable;struct dlm_rsbtable;struct dlm_dirtable;struct dlm_direntry;struct dlm_recover;struct dlm_header;struct dlm_message;struct dlm_rcom;struct dlm_mhandle;#define log_print(fmt, args...) \	printk(KERN_ERR "dlm: "fmt"\n" , ##args)#define log_error(ls, fmt, args...) \	printk(KERN_ERR "dlm: %s: " fmt "\n", (ls)->ls_name , ##args)#define log_debug(ls, fmt, args...) \do { \	if (dlm_config.ci_log_debug) \		printk(KERN_DEBUG "dlm: %s: " fmt "\n", \		       (ls)->ls_name , ##args); \} while (0)#define DLM_ASSERT(x, do) \{ \  if (!(x)) \  { \    printk(KERN_ERR "\nDLM:  Assertion failed on line %d of file %s\n" \               "DLM:  assertion:  \"%s\"\n" \               "DLM:  time = %lu\n", \               __LINE__, __FILE__, #x, jiffies); \    {do} \    printk("\n"); \    BUG(); \    panic("DLM:  Record message above and reboot.\n"); \  } \}#define DLM_FAKE_USER_AST ERR_PTR(-EINVAL)struct dlm_direntry {	struct list_head	list;	uint32_t		master_nodeid;	uint16_t		length;	char			name[1];};struct dlm_dirtable {	struct list_head	list;	rwlock_t		lock;};struct dlm_rsbtable {	struct list_head	list;	struct list_head	toss;	rwlock_t		lock;};struct dlm_lkbtable {	struct list_head	list;	rwlock_t		lock;	uint16_t		counter;};/* * Lockspace member (per node in a ls) */struct dlm_member {	struct list_head	list;	int			nodeid;	int			weight;};/* * Save and manage recovery state for a lockspace. */struct dlm_recover {	struct list_head	list;	int			*nodeids;	int			node_count;	uint64_t		seq;};/* * Pass input args to second stage locking function. */struct dlm_args {	uint32_t		flags;	void			*astaddr;	long			astparam;	void			*bastaddr;	int			mode;	struct dlm_lksb		*lksb;	unsigned long		timeout;};/* * Lock block * * A lock can be one of three types: * * local copy      lock is mastered locally *                 (lkb_nodeid is zero and DLM_LKF_MSTCPY is not set) * process copy    lock is mastered on a remote node *                 (lkb_nodeid is non-zero and DLM_LKF_MSTCPY is not set) * master copy     master node's copy of a lock owned by remote node *                 (lkb_nodeid is non-zero and DLM_LKF_MSTCPY is set) * * lkb_exflags: a copy of the most recent flags arg provided to dlm_lock or * dlm_unlock.  The dlm does not modify these or use any private flags in * this field; it only contains DLM_LKF_ flags from dlm.h.  These flags * are sent as-is to the remote master when the lock is remote. * * lkb_flags: internal dlm flags (DLM_IFL_ prefix) from dlm_internal.h. * Some internal flags are shared between the master and process nodes; * these shared flags are kept in the lower two bytes.  One of these * flags set on the master copy will be propagated to the process copy * and v.v.  Other internal flags are private to the master or process * node (e.g. DLM_IFL_MSTCPY).  These are kept in the high two bytes. * * lkb_sbflags: status block flags.  These flags are copied directly into * the caller's lksb.sb_flags prior to the dlm_lock/dlm_unlock completion * ast.  All defined in dlm.h with DLM_SBF_ prefix. * * lkb_status: the lock status indicates which rsb queue the lock is * on, grant, convert, or wait.  DLM_LKSTS_ WAITING/GRANTED/CONVERT * * lkb_wait_type: the dlm message type (DLM_MSG_ prefix) for which a * reply is needed.  Only set when the lkb is on the lockspace waiters * list awaiting a reply from a remote node. * * lkb_nodeid: when the lkb is a local copy, nodeid is 0; when the lkb * is a master copy, nodeid specifies the remote lock holder, when the * lkb is a process copy, the nodeid specifies the lock master. *//* lkb_ast_type */#define AST_COMP		1#define AST_BAST		2/* lkb_status */#define DLM_LKSTS_WAITING	1#define DLM_LKSTS_GRANTED	2#define DLM_LKSTS_CONVERT	3/* lkb_flags */#define DLM_IFL_MSTCPY		0x00010000#define DLM_IFL_RESEND		0x00020000#define DLM_IFL_DEAD		0x00040000#define DLM_IFL_OVERLAP_UNLOCK  0x00080000#define DLM_IFL_OVERLAP_CANCEL  0x00100000#define DLM_IFL_ENDOFLIFE	0x00200000#define DLM_IFL_WATCH_TIMEWARN	0x00400000#define DLM_IFL_TIMEOUT_CANCEL	0x00800000#define DLM_IFL_DEADLOCK_CANCEL	0x01000000#define DLM_IFL_USER		0x00000001#define DLM_IFL_ORPHAN		0x00000002struct dlm_lkb {	struct dlm_rsb		*lkb_resource;	/* the rsb */	struct kref		lkb_ref;	int			lkb_nodeid;	/* copied from rsb */	int			lkb_ownpid;	/* pid of lock owner */	uint32_t		lkb_id;		/* our lock ID */	uint32_t		lkb_remid;	/* lock ID on remote partner */	uint32_t		lkb_exflags;	/* external flags from caller */	uint32_t		lkb_sbflags;	/* lksb flags */	uint32_t		lkb_flags;	/* internal flags */	uint32_t		lkb_lvbseq;	/* lvb sequence number */	int8_t			lkb_status;     /* granted, waiting, convert */	int8_t			lkb_rqmode;	/* requested lock mode */	int8_t			lkb_grmode;	/* granted lock mode */	int8_t			lkb_bastmode;	/* requested mode */	int8_t			lkb_highbast;	/* highest mode bast sent for */	int8_t			lkb_wait_type;	/* type of reply waiting for */	int8_t			lkb_wait_count;	int8_t			lkb_ast_type;	/* type of ast queued for */	struct list_head	lkb_idtbl_list;	/* lockspace lkbtbl */	struct list_head	lkb_statequeue;	/* rsb g/c/w list */	struct list_head	lkb_rsb_lookup;	/* waiting for rsb lookup */	struct list_head	lkb_wait_reply;	/* waiting for remote reply */	struct list_head	lkb_astqueue;	/* need ast to be sent */	struct list_head	lkb_ownqueue;	/* list of locks for a process */	struct list_head	lkb_time_list;	unsigned long		lkb_timestamp;	unsigned long		lkb_timeout_cs;	char			*lkb_lvbptr;	struct dlm_lksb		*lkb_lksb;      /* caller's status block */	void			*lkb_astaddr;	/* caller's ast function */	void			*lkb_bastaddr;	/* caller's bast function */	long			lkb_astparam;	/* caller's ast arg */};struct dlm_rsb {	struct dlm_ls		*res_ls;	/* the lockspace */	struct kref		res_ref;	struct mutex		res_mutex;	unsigned long		res_flags;	int			res_length;	/* length of rsb name */	int			res_nodeid;	uint32_t                res_lvbseq;	uint32_t		res_hash;	uint32_t		res_bucket;	/* rsbtbl */	unsigned long		res_toss_time;	uint32_t		res_first_lkid;	struct list_head	res_lookup;	/* lkbs waiting on first */	struct list_head	res_hashchain;	/* rsbtbl */	struct list_head	res_grantqueue;	struct list_head	res_convertqueue;	struct list_head	res_waitqueue;	struct list_head	res_root_list;	    /* used for recovery */	struct list_head	res_recover_list;   /* used for recovery */	int			res_recover_locks_count;	char			*res_lvbptr;	char			res_name[1];};/* find_rsb() flags */

⌨️ 快捷键说明

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