Действительно ли fsnotify нужно сканировать глобальные списки? - PullRequest
3 голосов
/ 05 сентября 2011

Я изучаю код ядра 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 * Кто-нибудь знает, почему здесь все еще используется глобальный список?

1 Ответ

2 голосов
/ 06 сентября 2011

Последняя версия , похоже, больше этого не делает.

...