📄 raid1.h.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 + -