Linux bcachefs list
 help / color / mirror / Atom feed
* [PATCH] bcachefs: omit alignment attribute on big endian struct bkey
@ 2024-02-15 16:19 Thomas Bertschinger
  2024-02-15 17:23 ` Brian Foster
  0 siblings, 1 reply; 4+ messages in thread
From: Thomas Bertschinger @ 2024-02-15 16:19 UTC (permalink / raw)
  To: linux-bcachefs, kent.overstreet, bfoster; +Cc: Thomas Bertschinger

This is needed for building Rust bindings on big endian architectures
like s390x. Currently this is only done in userspace, but it might
happen in-kernel in the future. When creating a Rust binding for struct
bkey, the "packed" attribute is needed to get a type with the correct
member offsets. However, rustc does not allow types to have both a
"packed" and "align" attribute. Thus, in order to get a Rust type
compatible with the C type, on big endian systems we must omit the
"aligned" attribute in C.

This does not affect the struct's size or member offsets, only its
toplevel alignment, which should be an acceptable impact.

Signed-off-by: Thomas Bertschinger <tahbertschinger@gmail.com>
---
 fs/bcachefs/bcachefs_format.h | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/fs/bcachefs/bcachefs_format.h b/fs/bcachefs/bcachefs_format.h
index 1bb24aa73528..fc12efe8f8cd 100644
--- a/fs/bcachefs/bcachefs_format.h
+++ b/fs/bcachefs/bcachefs_format.h
@@ -222,7 +222,11 @@ struct bkey {
 
 	__u8		pad[1];
 #endif
-} __packed __aligned(8);
+} __packed
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+__aligned(8)
+#endif
+;
 
 struct bkey_packed {
 	__u64		_data[0];
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-02-16  0:12 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-15 16:19 [PATCH] bcachefs: omit alignment attribute on big endian struct bkey Thomas Bertschinger
2024-02-15 17:23 ` Brian Foster
2024-02-15 18:02   ` Thomas Bertschinger
2024-02-16  0:12     ` Kent Overstreet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox