(1) There is a reimplemented variation of these lists in CCAN (http://ccan.ozlabs.org/info/list.html) which has fewer historical warts and a saner license (LGPL v2 or later) than the kernel one.
(2) The rb_tree non-search function is a historical relic; recent gcc will happily inline functions passed by pointer, so search can be made an inline these days. (I had a patch a while back, and reported a bug about the lack of inlining to gcc, which is how I know it's been fixed).