2015-12-16 5 views
2

Я пытаюсь использовать дерево radix для поддержки одной внутренней информации для драйвера. Итак, каков правильный способ уничтожить все дерево?Как уничтожить одно дерево radix в ядре linux

Одна мысль пересечь дерево с способом, указанным на сайте: 1

Для каждого узла, освободить деталь и удалить его ключ из дерева.

Другой вопрос: есть ли radix_tree_for_each_slot() сейф с удаленным элементом внутри цикла? Удалит ли сброс внутренней усадки и вызовет сбой итерации?

ответ

1

Отъезд cgwb_bdi_destroy.

Кажется, что вы делаете в значительной степени то, что вам нужно - оно итерации над деревом оснований с radix_tree_for_each_slot(), и при этом он также делает radix_tree_delete (от cgwb_kill).

Так что, я думаю, ничего не должно взорваться, если вы правильно синхронизируете вещи.

+0

Как насчет дерева оснований? Или сказать, is radix_tree_delete единственная операция по уничтожению дерева? – Eric

+1

ОК, изначально я беспокоился о radix_tree_node_cachep, созданном kmem_cache_create. Кажется, есть только один cahcep, созданный во время init, и все деревья разделяют один и тот же, тогда нет необходимости и не должны его уничтожать. Благодаря! – Eric