結構體**
struct r5l_log ;
一、幾個重要的元素
log_start
功能:新資料在log中的起始扇區
變化:向磁碟寫新頁的時候,扇區加8(為什麼是8呢,因為預設一頁是8個扇區呀)
current_io
功能:正在接收資料的結構體
初始化:建立meta時,log->current_io = r5l_new_meta(log)
刪除:寫log的時候,log->current_io = null
二、鍊錶
running_ios:
功能:組織接收資料,沒有完全寫入log的io
初始化:初始化log的時候,init_list_head(&log->running_ios)
進:建立meta的時候,io加入list_add_tail(&io->log_sibling, &log->running_ios)
出:如果io的state位是io_unit_io_end,io就會從running_ios移到finished_ios
io_end_ios:
功能:組織寫入log,沒有寫入raid的io(need_cache_flush)
初始化:初始化log的時候,init_list_head(&log->io_end_ios)
進:當log->need_cache_flush為真的時候,r5l_move_io_unit_list(&log->running_ios, &log->io_end_ios, io_unit_io_end);
出:加到flushing_ios ;list_splice_tail_init(&log->io_end_ios, &log->flushing_ios)
flushing_ios
功能:組織flush的io
初始化:初始化log的時候,init_list_head(&log->flushing_ios)
進:出:從io->stripe_list取下來後,提交sh,list_splice_tail_init(&log->flushing_ios, &log->finished_ios)
finished_ios
功能:組織已經寫入log的io
初始化:初始化log的時候,init_list_head(&log->finished_ios)
進;出:r5l_complete_finished_ios,
no_space_stripes
功能:因log沒有空間而pending的條帶
初始化:
進:準備寫log時,log沒有空間存放,list_add_tail(&sh->log_list, &log->no_space_stripes)
出:log空間**後,sh = list_first_entry(&log->no_space_stripes, struct stripe_head, log_list); list_del_init(&sh->log_list); 接著set_bit(stripe_handle, &sh->state); raid5_release_stripe(sh)
三、幾個有點難的元素
struct kmem_cache *io_kc:
賦值:log->io_kc = kmem_cache(r5l_io_unit, 0)
使用:申請io,io = kmem_cache_zalloc(log->io_kc, gfp_noio | __gfp_nofail)
釋放:kmem_cache_destroy(log->io_kc)
struct md_thread *reclain_target
功能:**的執行緒
wait_queue_head_t iounit_wait
初始化:init_waitqueue_head(&log->iounit_wait)
喚醒:wake_up(&log->iounit_wait)
使用:**的時候wait_event_lock_irq(log->iounit_wait, r5l_reclaimable_space(log) > reclaimable, log->io_list_lock);
RAID 5(二)資料結構
這些文章已經寫了好幾年了,可能已經過時了。在msn space和qqzone幾經輾轉之後,我想也許這些技術文章還是放在搞技術的部落格中更能幫助人。於是做了乙個艱難的決定,把這些文章一篇篇搬過來!絕對是原創的。bio 與 stripe head 在linux塊裝置驅動中有乙個非常重要的資料結構那就是b...
資料結構5
第四章 字串和多維陣列 4.1 字串 4.1.1 字串的定義 字串的定義 串 零個或多個字元組成的有限序列。串長度 串中所包含的字元個數。空串 長度為0的串,記為 非空串通常記為 s s1 s2 sn 其中 s是串名,雙引號是定界符,雙引號引起來的部分是串值 si 1 i n 是乙個任意字元。子串 ...
《資料結構》實驗5
1.回樹和二叉樹的邏輯結構和儲存方法,清楚掌握樹和二叉樹的遍歷操作。2.學習樹的相關知識來解決實際問題。3.進一步鞏固程式除錯方法。4.進一步鞏固模板程式設計。實驗內容 1.自己設計乙個二叉樹,深度最少為4,請遞迴演算法分別用前序 中序 後序遍歷輸出樹結點。1.標頭檔案 bitree.h ifnde...