On Sat, Mar 03, 2018 at 09:55:22AM -0500, Jeff Layton wrote: > On Mon, 2018-02-19 at 11:45 -0800, Matthew Wilcox wrote: > > From: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx> > > > > This results in no change in structure size on 64-bit x86 as it fits in > > the padding between the gfp_t and the void *. > > > > While the patch itself looks fine, we should take note that this will > likely increase the size of radix_tree_root on 32-bit arches. > > I don't think that's necessarily a deal breaker, but there are a lot of > users of radix_tree_root. Many of those users have their own spinlock > for radix tree accesses, and could be trivially changed to use the > xa_lock. That would need to be done piecemeal though. > > A less disruptive idea might be to just create some new struct that's a > spinlock + radix_tree_root, and then use that going forward in the > xarray conversion. That might be better anyway if you're considering a > more phased approach for getting this merged. Well, it's a choice. If we do: struct xarray { spinlock_t xa_lock; struct radix_tree_root root; }; then the padding on 64-bit turns that into a 24-byte struct. So do we spend the extra 4 bytes on 32-bit and have the struct the way we want it to look from the beginning, or do we spend the extra 8 bytes on 64-bit and have to redo the struct accessors after the conversions are complete? I chose option (a), but reasonable people can disagree on that choice.