1.添加inode到inode cache链表
当inode的引用计数器i_count为0后,会调用iput_final去释放
static void iput_final(struct inode *inode)
{
struct super_block *sb = inode->i_sb;
const struct super_operations *op = inode->i_sb->s_op;
unsigned long state;
int drop;
WARN_ON(inode->i_state & I_NEW);
if (op->drop_inode)
drop = op->drop_inode(inode);
else
drop = generic_drop_inode(inode);
//引用计数为0之后,将inode放到lru中,等待回收
if (!drop &&
!(inode->i_state & I_DONTCACHE) &&
(sb->s_flags & SB_ACTIVE)) {
inode_add_lru(inode);
spin_unlock(&inode->i_lock);
return;
}
//对于已经被文件系统除名的文件,即i_nlink = 0, 不必再保留inode,直接释放掉
WRITE_ONCE(inode->i_state, state | I_FREEING

本文详细介绍了Linux内核中inode的管理,包括inode引用计数减少后的处理(iput_final),inode从inodecache中删除(prune_icache_sb),以及回收过程中的evict、destroy_inode和ext4_destroy_inode等函数。重点展示了inode如何从使用到回收,最终返回SLAB缓存的过程。
最低0.47元/天 解锁文章
965

被折叠的 条评论
为什么被折叠?



