- 论坛徽章:
- 15
|
ooo~
static int __block_prepare_write(struct inode *inode, struct page *page,
unsigned from, unsigned to, get_block_t *get_block)
{
unsigned block_start, block_end;
sector_t block;
int err = 0;
unsigned blocksize, bbits;
struct buffer_head *bh, *head, *wait[2], **wait_bh=wait;
BUG_ON(!PageLocked(page));
BUG_ON(from > PAGE_CACHE_SIZE);
BUG_ON(to > PAGE_CACHE_SIZE);
BUG_ON(from > to);
blocksize = 1 << inode->i_blkbits;
/**
* 检查某页是否是一个缓冲区页(如果是则PG_Private标志置位)。
* 如果没有设置该标志,则调用create_empty_buffers为页中所有的缓冲区分配缓冲区首部
*/
if (!page_has_buffers(page))
create_empty_buffers(page, blocksize, 0);
head = page_buffers(page);
请问为什么这里,当page不是buffer page的时候,还要为其分配buffer_head呢?照理解,正常的write不需要使用buffer,也就不需要使用buffer_head吧?如果是这样的话,那write时所有的页都需要为其分配buffer_head了?为啥? |
|