Может быть полезно понять изменение кода для использования Git Blame View:
https://github.com/torvalds/linux/blame/a978a5b8d83f795e107a2ff759b28643739be70e/include/linux/skbuff.h
Вы можете увидеть то, что говорится в описании коммита , гдеизменение было сделано :
net: добавить непрозрачную структуру вокруг страницы фрагмента skb
Я выделил этот бит из деструктора фрагмента skbпатч, поскольку он помогает принудительно использовать API фрагмента.
Так что, похоже, это было сделано только для того, чтобы перехватить в коде висячие ссылки, которые делали необработанный доступ к указателю, и принудительно использовать более высокийУровень API.Это не должно добавить никаких затрат времени выполнения.
Как отступление: в последний раз, когда я делал это сам, у меня была какая-то глупая идея, которая заключается в разделении имени структуры на что-то вроде struct { struct page *ge; } pa;
... таким образом привилегированный код может читаться как fragstruct.pa.ge вместо fragstruct.page.p .Но за исключением того, что это глупо, преимущество использования того же имени для внешней структуры помогает направлять старое использование с явными ошибками.Хотя, как указывает ваша путаница, комментарий // don't access directly, use fragment API
к члену p
, вероятно, был бы уместен в этом случае.