跳转到内容

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

华夏公益教科书