Chinaunix首页 | 论坛 | 博客
  • 博客访问: 165458
  • 博文数量: 22
  • 博客积分: 126
  • 博客等级: 入伍新兵
  • 技术积分: 459
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-26 21:14
文章分类
文章存档

2013年(22)

我的朋友

分类: LINUX

2013-08-04 18:27:59

Q:I_FREEING标识inode正在被释放,由于竞争,drop_pagecache_sb(),igrab()等函数中看到的I_FREEING,I_WILL_FREE置位的inode是否可能正在被释放到slab?
A:不会,由于supberblock的i_sb_list受inode_lock保护,drop_pagecache_sb()和dispose_list()竞争时,如果drop_pagecache_sb竞争到了inode_lock锁,dispose_list()要销毁inode就必须等待,确保drop_pagecache_sb()可以安全的遍历inode;如果dispose_list()竞争到了inode_lock锁,在destroy_inode()之前必须先将inode从icache和i_sb_list中移除,此后drop_pagecache_sb()获得锁,自然就无法看到I_FREEING置位的inode.也就是说,只要获得了inode_lock锁就可以任意遍历icache和superblock中的inode,无需担心inode被销毁.

Q:generic_sync_sb_inodes()中为什么不会看到I_FREEING置位的inode?
A:inode在置位I_FREEING以前都会先从superblock的io,dirty或全局inode_unused链表中移除,generic_sync_sb_inodes()只回写superblock的io和dirty链表中的inode,自然不会看到I_FREEING置位的inode.

Q:__sync_single_inode()中,什么情况下inode的I_FREEING标志会置位?
1.generic_sync_sb_inodes()->__writeback_single_inode()->__sync_single_inode()情况下,在generic_sync_sb_inodes()中会增加inode的引用计数,因此在__sync_single_inode()不会出现I_FREEING置位的情况.
2.generic_forget_inode()->write_inode_now()->__writeback_single_inode()->__sync_single_inode()情况下,inode的引用计数为0,__sync_single_inode()会释放inode_lock,此时sys_umount()会置位inode的I_FREEING.

阅读(2930) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~