kernel source 问题,谢谢!

lolin 2002-07-17 10:11:42
麻烦哪位能帮我讲解一下这个函数,看不明白啊!
/fs/ext2/truncate.c(linux2.3.12)

static int trunc_direct (struct inode * inode)
{
int i, retry = 0;
unsigned long block_to_free = 0, free_count = 0;
int blocks = inode->i_sb->s_blocksize / 512;
int direct_block = DIRECT_BLOCK(inode);

for (i = direct_block ; i < EXT2_NDIR_BLOCKS ; i++) {
u32 * p = inode->u.ext2_i.i_data + i;
int tmp = le32_to_cpu(*p);

if (!tmp)
continue;

*p = 0;
inode->i_blocks -= blocks;
mark_inode_dirty(inode);

/* accumulate blocks to free if they're contiguous */
if (free_count == 0)
goto free_this;
else if (block_to_free == tmp - free_count)
free_count++;
else {
ext2_free_blocks (inode, block_to_free, free_count);
free_this:
block_to_free = tmp;
free_count = 1;
}
}
if (free_count > 0)
ext2_free_blocks (inode, block_to_free, free_count);
return retry;
}

特别是那个for循环的开始、终止条件!

thanks again!
...全文
16 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lolin 2002-07-17
对不起,忘了说明。这段是ext2文件系统用来进行从 文件块号-》磁盘逻辑 块号的换算,以便释放整个文件的空间。
这个函数对前12个直接块进行释放,这个文件包含的其他函数对剩余文件块进行换算(我个人这样认为)。
回复
ajiefudan 2002-07-17
看代码不能只看一段,查查调用的函数,宏定义,综合来看才可以。
回复
相关推荐
发帖
系统维护与使用区
创建于2007-08-27

1.9w+

社区成员

系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
申请成为版主
帖子事件
创建了帖子
2002-07-17 10:11
社区公告
暂无公告