git: radix: Fix the non-per-cpu radix tree usage.

看板DFBSD_commit作者時間15年前 (2011/02/01 17:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
commit b4628cf91a5f54965e6a4221f243e315aa7a6860 Author: Sepherosa Ziehau <sephe@dragonflybsd.org> Date: Tue Feb 1 16:09:26 2011 +0800 radix: Fix the non-per-cpu radix tree usage. - Install a mask radix tree in each radix tree, while, mask radix tree does not have mask radix tree (of course). - rn_cpumaskhead() is added to provide the global per-cpu mask radix tree. - rn_inithead() requires a mask radix tree as paramter. Mask radix tree is initialized by passing NULL. INET/INET6/ATALK pass the mask radix tree obtained from rn_cpumaskhead(), i.e. the old sementics. - pf(4) now creates its own mask radix tree, and all of its internal radix trees will use that mask radix tree instead of the global per-cpu mask radix tree. pf(4) radix tree operations are protected by its own token. - rn_addmask() requires a mask radix tree, instead of using the global per-cpu mask radix tree. For most cases, the caller has access to the radix tree that has a mask radix tree installed. For _rtmask_lookup(), which is always called from route_output(), we could safely assume that global per-cpu mask radix tree is used. This is mainly used to fix the following bug concerning global per-cpu mask radix tree: Before this commit, pf(4) could create mask on CPU0's mask radix tree, while the deletion of the mask happens on other CPUs, which results pf(4)'s radix tree operation to fail (can't locate the mask). Dragonfly-bug: http://bugs.dragonflybsd.org/issue1969 Root-cause-found-by: Jan Lentfer <Jan.Lentfer@web.de> Summary of changes: sys/net/pf/pf.c | 3 +++ sys/net/pf/pf_ioctl.c | 21 +++++++++++++++++++++ sys/net/pf/pf_table.c | 5 +++-- sys/net/pf/pfvar.h | 1 + sys/net/radix.c | 25 ++++++++++++++++++------- sys/net/radix.h | 8 ++++++-- sys/net/route.c | 2 +- sys/netinet/in_rmx.c | 2 +- sys/netinet6/in6_rmx.c | 2 +- sys/netproto/atalk/at_rmx.c | 2 +- 10 files changed, 56 insertions(+), 15 deletions(-) http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/b4628cf91a5f54965e6a4221f243e315aa7a6860 -- DragonFly BSD source repository
文章代碼(AID): #1DHylJ59 (DFBSD_commit)