raid5 cache c資料結構之r5l io

2021-08-02 08:21:15 字數 2048 閱讀 1421

結構體**

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...