【发布时间】:2011-09-05 13:36:05
【问题描述】:
我正在研究 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; },它肯定会随着系统上通知侦听器的数量而更好地扩展。
周围的人都知道为什么这里仍然使用全局列表吗?
【问题讨论】:
标签: linux performance coding-style notifications linux-kernel