2011-09-05 26 views
3

我正在研究linux内核代码,更具体地说是fs/notify/fsnotify.c中的文件系统通知... AFAIK,现在每个inode都有一个“标记”列表,每个标记引用一个“组”通知该inode。在VFS代码,通知是通过使用fsnotify(triggering_inode, REASON|OTHER_REASON, additional_parameters...)fsnotify真的需要全局列表扫描吗?

在这一fsnotify()功能提高,我被

list_for_each_entry_rcu(group, &fsnotify_groups, group_list) { 
    if (test_mask & group->mask) { 
     if (!group->ops->should_send_event(group, to_tell, mask)) 
       continue; 
      // more code that sends notification 
    } 
} 

不解特别是由事实fsnotify_groups显然是(fsnotify.h)全球列出所有组的记录。我最好的选择是内核开发人员知道他们在这里做了什么,而且我错过了一个关键点,它阻止我们仅仅使用foreach(mark:inode->fsnotify_mark_entry) { g=mark->associated_group; },这肯定会随着系统上的通知监听器数量的增加而更好地扩展。

任何人都有一个线索,为什么事情仍然在这里使用全局列表?

回答

2

latest version似乎不再那样做了。

+0

要去研究一下。感谢您指出。 – PypeBros

+0

所以这个性能问题已经从2.6.36开始处理了,上面的怪异只是“过渡性”差的代码。 – PypeBros