linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

バッファ操作 - rb_inc_page()

概要

バッファを次のバッファに入れ替える

詳細

この関数ではバッファの保持されているページを示すstruct buffer_page構造体のポインタへのポインタであるbpageを受け取る

bpage内のstruct list_head構造体の要素であるlistメンバから次のリストへのポインタを示すnextメンバを取得し、rb_list_head()に取得した値を渡すことで、次のバッファのlistメンバへのポインタを得る

その後list_entry()で取得したポインタが含まれるstruct buffer_pageへのポインタをbpageのアドレスが指すアドレスの値を次のバッファに変更する

この処理は以下のようにアドレスAの内容をアドレスBからアドレスCに書き換えることによってアドレスAのポインタの向き先を次のバッファに向けるものです

|       アドレスA       | **bpage
            ↓
|   アドレスB → アドレスC | アドレスA --------------------
            ↓                                      ↓
|     現在のバッファ     |  アドレスB              | 次のバッファ | アドレスC

この処理によって関数の呼び出し元で引数として指定した変数のポインタの向き先が変わる