Messages in this thread | | | Date | Thu, 9 Apr 2015 16:09:07 +0800 | From | Lai Jiangshan <> | Subject | Re: [PATCH v4 6/9] rbtree: Implement generic latch_tree |
| |
On 04/09/2015 12:48 AM, Peter Zijlstra wrote:
> + > +struct latch_tree_node { > + /* > + * Because we have an array of two entries in struct latch_tree_nodes > + * it's not possible to use container_of() to get back to the > + * encapsulating structure; therefore we have to put in a back pointer. > + */ > + void *priv; > + struct rb_node node; > +};
I don't think @priv is strictly needed. It is possible to use container_of() to go back. @priv is even not used in this file (except the initialization).
First, we can use container_of() to find encapsulating structure from the struct latch_tree_nodeS.
Second, we can add a @idx to __lt_insert() and __lt_find(), thus we can find the encapsulating latch_tree_nodes from rb_node or latch_tree_node. and struct latch_tree_ops uses latch_tree_nodes instead.
Did I miss anything? If the @priv is possible to be removed, removing it will simplify this file but it may add a little more code in the module.c where the ltn_core<n_init can't share the same ->less() and ->comp() after.
If you do remove @priv, please also use rb_node instead of old latch_tree_node and rename old latch_tree_nodes to latch_tree_node.
| |