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() 尝试失败,则会导致机器锁定。