On Thu, Feb 15, 2024 at 11:02:22AM -0700, Thomas Bertschinger wrote:
> On Thu, Feb 15, 2024 at 12:23:12PM -0500, Brian Foster wrote:
> > I can't really comment on the Rust context, but could you add a comment
> > to explain why the ifdef is here? I.e., even something as simple as
> > "Rust disallows packed and aligned on ..." is useful.
> > 
> > Brian
> 
> I'll work on a v2 with an explanatory comment.
> 
> > Also out of curiosity, is there some reason these two attributes
> > together presumably isn't a problem for LE?
> 
> The root of the problem is that rustc won't compile types with both
> packed and align attributes. However, rust-bindgen tries to be helpful
> and when generating Rust bindings for C types with both attrs, will
> avoid placing one or the other attribute if it can do so without
> changing the type's layout.
> 
> For LE, the "packed" attr is unneeded because the struct is "naturally
> packed", but the "align(8)" attr is needed because the struct's natural
> alignment is 4.
> 
> For BE, the "packed" attr is needed because there are some members that
> are not aligned (e.g., `size` has as offset of 23 but wants to be at
> 24), so rust-bindgen cannot omit it. Thus we have to remove "align(8)"
> to get a type that rustc can compile.

Specifically, when i was designing bkey, I wanted the header to be no
bigger than necessary so that bkey_packed could use the rest. That means
that decently offten extent keys will fit into only 8 bytes, instead of
spilling over to 16.

But packed_bkey treats the part after the header - the packed section -
as a single multi word, variable length integer. And bkey, the unpacked
version, is just a special case version of a bkey_packed; all the packed
bkey code will work on keys in any packed format, the in-memory
representation of an unpacked key also is just one type of packed key...

So that constrains the key part of a bkig endian bkey to start right
after the header...

So if we ever do a bkey_v2 and need to expand the hedaer by another byte
for some reason, that would clean up that wart :)

Reply via email to