跳轉到內容

Linux 核心/get blk

來自華夏公益教科書,開放的書籍,開放的世界
#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() 嘗試失敗,則會導致機器鎖定。

華夏公益教科書