fsnotify真的需要全局列表扫描吗?

时间:2011-09-05 13:36:06

标签: linux performance coding-style notifications linux-kernel

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

引发通知

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; },这肯定会随着系统上通知侦听器的数量而更好地扩展。

周围的任何人都知道为什么事情仍然在这里使用全局列表?

1 个答案:

答案 0 :(得分:2)

latest version似乎不再这样做了。