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

📄 raid1.h.txt

📁 这是一个牛人的linux学习内核时分析内核的笔记
💻 TXT
字号:
any problems, send mails to sindybear@163.com


相关文件
	/drivers/md/raid1.c

(1)
struct raid1_private_data {
	mddev_t			*mddev;
	struct mirror_info	mirrors[MD_SB_DISKS];
	int			nr_disks;		//系统中一共有多少个磁盘
	int			raid_disks;
	int			working_disks;		//工作的盘的数目
	int			last_used;
	unsigned long		next_sect;
	int			sect_count;
	mdk_thread_t		*thread, *resync_thread;
	int			resync_mirrors;
	struct mirror_info	*spare;
	md_spinlock_t		device_lock;

	/*
	 * 所有的raid1的操作所使用的bh都是预先分配好的,以栈的形式进行组织。
	 * 其实就是单向链表,使用的时候从头开始摘取。
	 * 这样做主要是为了避免内存紧张时候的死锁。
	 */
	struct buffer_head	*freebh;
	int			freebh_cnt;	/* how many are on the list */
	int			freebh_blocked;

	/* 
	 * 同上,这不过这里是raid1_bh的结构
	 */
	struct raid1_bh		*freer1;
	int			freer1_blocked;
	int			freer1_cnt;

	struct raid1_bh		*freebuf; 	/* each bh_req has a page allocated */
	md_wait_queue_head_t	wait_buffer;

	/* 同步镜象盘的时候使用 */
	unsigned long	start_active, start_ready,
		start_pending, start_future;
	int	cnt_done, cnt_active, cnt_ready,
		cnt_pending, cnt_future;
	int	phase;
	int	window;
	md_wait_queue_head_t	wait_done;
	md_wait_queue_head_t	wait_ready;
	md_spinlock_t		segment_lock;
};



(2)
struct raid1_bh {
	atomic_t		remaining; 	//用来计数要完成多少个I/O操作。在回调中递减
	
	int			cmd;		//命令类型,READ还是WRITE
	unsigned long		state;
	mddev_t			*mddev;
	struct buffer_head	*master_bh;	//用来存储文件系统传下来的那个buffer_head
	struct buffer_head	*mirror_bh_list;//对镜象盘进行的写操作的bh都连接到这个指针后面
	struct buffer_head	bh_req;
	struct raid1_bh		*next_r1;	/* next for retry or in free list */
};

⌨️ 快捷键说明

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