我正在研究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; }
,这肯定会随着系统上通知侦听器的数量而更好地扩展。
周围的任何人都知道为什么事情仍然在这里使用全局列表?