Linux 核心/get blk
外觀
< Linux 核心
#include <linux/buffer_head.h> struct buffer_head * __getblk(struct block_device * bdev, sector_t block, unsigned size);
- bdev: 要獲取緩衝區頭的塊裝置。
- block: 要獲取緩衝區頭的塊號。
- size: 塊的大小(簇?)以位元組為單位。
此函式返回給定(裝置|塊|大小)元組的有效緩衝區頭。
此函式始終返回給定(裝置|塊|大小)元組的有效緩衝區頭。如果該塊的緩衝區頭已存在,則直接返回。如果不存在,則會建立該緩衝區頭。傳遞非法塊號會導致為該非法塊建立一個有效的緩衝區頭。隨後對該緩衝區頭的操作將產生相應的錯誤。
呼叫此函式後,緩衝區頭的引用計數將增加。此外,它將被新增到當前 CPU 的最近最少使用列表中,因此其使用計數將增加兩次而不是一次。但是,第二次增加只是為了確保 LRU 列表中的緩衝區頭不會被獲取。其他 LRU 函式確保在適當的時候取消一次增加。另一次增加必須由呼叫者透過呼叫 __brelse(bh) 取消。
給定(裝置|塊|大小)元組的緩衝區頭。
如果 __getblk() 的 grow_dev_page 的 try_to_free_buffers() 嘗試失敗,則會導致機器鎖定。