Cc'ing a moderated list is sodding annoying, dropped it. On Wed, Apr 28, 2021 at 03:36:02PM +0000, Liam Howlett wrote: > +struct maple_range_64 { > + struct maple_pnode *parent; > + unsigned long pivot[MAPLE_RANGE64_SLOTS - 1]; > + void __rcu *slot[MAPLE_RANGE64_SLOTS]; > +}; > + > +struct maple_arange_64 { > + struct maple_pnode *parent; > + unsigned long pivot[MAPLE_ARANGE64_SLOTS - 1]; > + void __rcu *slot[MAPLE_ARANGE64_SLOTS]; > + unsigned long gap[MAPLE_ARANGE64_SLOTS]; > + unsigned char meta; > +}; > + > +struct maple_alloc { > + unsigned long total; > + unsigned char node_count; > + unsigned int request_count; > + struct maple_alloc *slot[MAPLE_ALLOC_SLOTS]; > +}; > + > +struct maple_topiary { > + struct maple_pnode *parent; > + struct maple_enode *next; /* Overlaps the pivot */ > +}; > + > +enum maple_type { > + maple_dense, > + maple_leaf_64, > + maple_range_64, > + maple_arange_64, > +}; > +struct maple_node { > + union { > + struct { > + struct maple_pnode *parent; > + void __rcu *slot[MAPLE_NODE_SLOTS]; > + }; > + struct { > + void *pad; > + struct rcu_head rcu; > + unsigned int ma_flags; > + enum maple_type type; > + }; > + struct maple_range_64 mr64; > + struct maple_arange_64 ma64; > + struct maple_alloc alloc; > + }; > +}; This is somewhat inconsistent; would it make sense to have struct maple_dense and struct maple_leaf_64, and maybe even struct maple_free, such that one can write: struct maple_node { union { /* maple_type: */ struct maple_dense md; struct maple_leaf_64 ml64; struct maple_range_64 mr64; struct maple_arange_64 ma64; /* internal, life-time: */ struct maple_alloc alloc; struct maple_free free; }; }; Or something along those lines.