Я изучаю код ядра linux, более конкретно уведомления файловой системы в fs / notify / fsnotify.c ... AFAIK, каждый индекс теперь получает список "меток", каждый из которых ссылается на "группу", котораяслушает уведомление об этом 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; }
, который определенно лучше масштабируется с количеством прослушивателей уведомлений в системе.1011 * Кто-нибудь знает, почему здесь все еще используется глобальный список?