?? raid1.h.txt
字號:
any problems, send mails to sindybear@163.com
相關(guān)文件
/drivers/md/raid1.c
(1)
struct raid1_private_data {
mddev_t *mddev;
struct mirror_info mirrors[MD_SB_DISKS];
int nr_disks; //系統(tǒng)中一共有多少個磁盤
int raid_disks;
int working_disks; //工作的盤的數(shù)目
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都是預(yù)先分配好的,以棧的形式進行組織。
* 其實就是單向鏈表,使用的時候從頭開始摘取。
* 這樣做主要是為了避免內(nèi)存緊張時候的死鎖。
*/
struct buffer_head *freebh;
int freebh_cnt; /* how many are on the list */
int freebh_blocked;
/*
* 同上,這不過這里是raid1_bh的結(jié)構(gòu)
*/
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; //用來計數(shù)要完成多少個I/O操作。在回調(diào)中遞減
int cmd; //命令類型,READ還是WRITE
unsigned long state;
mddev_t *mddev;
struct buffer_head *master_bh; //用來存儲文件系統(tǒng)傳下來的那個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 */
};
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -