--- /dev/null
+Revert upstream patch f6b619da.
+
+With this revert (and a loosening of the version dependency in
+Cargo.toml), we compile and run with bindgen 0.66, which is in Debian.
+It can safely be removed when Debian upgrades to at least 0.69.2.
+
+Index: bcachefs-tools/Cargo.lock
+===================================================================
+--- bcachefs-tools.orig/Cargo.lock
++++ bcachefs-tools/Cargo.lock
+@@ -107,17 +107,17 @@ dependencies = [
+
+ [[package]]
+ name = "bindgen"
+-version = "0.69.4"
++version = "0.69.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0"
++checksum = "a4c69fae65a523209d34240b60abe0c42d33d1045d445c0839d8a4894a736e2d"
+ dependencies = [
+ "bitflags 2.4.2",
+ "cexpr",
+ "clang-sys",
+- "itertools",
+ "lazy_static",
+ "lazycell",
+ "log",
++ "peeking_take_while",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+@@ -312,15 +312,6 @@ dependencies = [
+ ]
+
+ [[package]]
+-name = "itertools"
+-version = "0.12.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
+-dependencies = [
+- "either",
+-]
+-
+-[[package]]
+ name = "lazy_static"
+ version = "1.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -414,6 +405,12 @@ source = "registry+https://github.com/ru
+ checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+ [[package]]
++name = "peeking_take_while"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
++
++[[package]]
+ name = "pkg-config"
+ version = "0.3.29"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+Index: bcachefs-tools/bch_bindgen/Cargo.toml
+===================================================================
+--- bcachefs-tools.orig/bch_bindgen/Cargo.toml
++++ bcachefs-tools/bch_bindgen/Cargo.toml
+@@ -19,4 +19,4 @@ paste = "1.0.11"
+
+ [build-dependencies]
+ pkg-config = "0.3"
+-bindgen = "0.69.4"
++bindgen = "0.69.2"
+Index: bcachefs-tools/bch_bindgen/build.rs
+===================================================================
+--- bcachefs-tools.orig/bch_bindgen/build.rs
++++ bcachefs-tools/bch_bindgen/build.rs
+@@ -120,15 +120,40 @@ fn main() {
+ .expect("Writing to output file failed for: `keyutils.rs`");
+ }
+
+-// rustc has a limitation where it does not allow structs with a "packed" attribute to contain a
+-// member with an "align(N)" attribute. There is one type in bcachefs with this issue:
+-// struct btree_node.
++// rustc has a limitation where it does not allow structs to have both a "packed" and "align"
++// attribute. This means that bindgen cannot copy all attributes from some C types, like struct
++// bkey, that are both packed and aligned.
+ //
+-// Luckily, it happens that this type does not need the "packed(N)" attribute in Rust to have the
+-// same ABI as C, so we can strip it off the bindgen output.
++// bindgen tries to handle this situation smartly and for many types it will only apply a
++// "packed(N)" attribute if that is good enough. However, there are a few types where bindgen
++// does end up generating both a packed(N) and align(N) attribute. These types can't be compiled
++// by rustc.
++//
++// To work around this, we can remove either the "packed" or "align" attribute. It happens that
++// for all the types with this problem in bcachefs, removing the "packed" attribute and keeping
++// the "align" attribute results in a type with the correct ABI.
++//
++// This function applies that transformation to the following bcachefs types that need it:
++// - bkey
++// - bch_extent_crc32
++// - bch_extent_ptr
++// - btree_node
+ fn packed_and_align_fix(bindings: std::string::String) -> std::string::String {
+- bindings.replace(
+- "#[repr(C, packed(8))]\npub struct btree_node {",
+- "#[repr(C, align(8))]\npub struct btree_node {",
+- )
++ bindings
++ .replace(
++ "#[repr(C, packed(8))]\n#[repr(align(8))]\n#[derive(Debug, Default, Copy, Clone)]\npub struct bkey {",
++ "#[repr(C, align(8))]\n#[derive(Debug, Default, Copy, Clone)]\npub struct bkey {",
++ )
++ .replace(
++ "#[repr(C, packed(8))]\n#[repr(align(8))]\n#[derive(Debug, Default, Copy, Clone)]\npub struct bch_extent_crc32 {",
++ "#[repr(C, align(8))]\n#[derive(Debug, Default, Copy, Clone)]\npub struct bch_extent_crc32 {",
++ )
++ .replace(
++ "#[repr(C, packed(8))]\n#[repr(align(8))]\n#[derive(Debug, Default, Copy, Clone)]\npub struct bch_extent_ptr {",
++ "#[repr(C, align(8))]\n#[derive(Debug, Default, Copy, Clone)]\npub struct bch_extent_ptr {",
++ )
++ .replace(
++ "#[repr(C, packed(8))]\npub struct btree_node {",
++ "#[repr(C, align(8))]\npub struct btree_node {",
++ )
+ }