aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-03-02 22:01:00 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-03-02 22:01:00 -0500
commitd5b0d0892a9232ad0e5adb9a4c93cecbbfda41e6 (patch)
tree5e7bf277f82e2249105ebf9ce967ad48581a0ab8
parent8a7e3344fe089b3e2c6c45f00ade217e3d55a958 (diff)
downloadbcachefs-tools-d5b0d0892a9232ad0e5adb9a4c93cecbbfda41e6.tar.gz
rust: BkeySC now has correct lifetime on BtreeIter
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--rust-src/bch_bindgen/src/bkey.rs7
-rw-r--r--rust-src/bch_bindgen/src/btree.rs4
2 files changed, 7 insertions, 4 deletions
diff --git a/rust-src/bch_bindgen/src/bkey.rs b/rust-src/bch_bindgen/src/bkey.rs
index 6735f298..c7910c76 100644
--- a/rust-src/bch_bindgen/src/bkey.rs
+++ b/rust-src/bch_bindgen/src/bkey.rs
@@ -2,13 +2,16 @@
use crate::c;
use crate::fs::Fs;
+use crate::btree::BtreeIter;
use std::ffi::CStr;
use std::fmt;
+use std::marker::PhantomData;
use std::mem::transmute;
pub struct BkeySC<'a> {
- pub k: &'a c::bkey,
- pub v: &'a c::bch_val,
+ pub k: &'a c::bkey,
+ pub v: &'a c::bch_val,
+ pub(crate) iter: PhantomData<&'a mut BtreeIter<'a>>
}
pub enum BkeyValC<'a> {
diff --git a/rust-src/bch_bindgen/src/btree.rs b/rust-src/bch_bindgen/src/btree.rs
index 8ab91aeb..c6d2fec2 100644
--- a/rust-src/bch_bindgen/src/btree.rs
+++ b/rust-src/bch_bindgen/src/btree.rs
@@ -76,7 +76,7 @@ impl<'t> BtreeIter<'t> {
unsafe {
let k = c::bch2_btree_iter_peek_upto(&mut self.raw, end);
errptr_to_result_c(k.k)
- .map(|_| if !k.k.is_null() { Some(BkeySC { k: &*k.k, v: &*k.v }) } else { None } )
+ .map(|_| if !k.k.is_null() { Some(BkeySC { k: &*k.k, v: &*k.v, iter: PhantomData }) } else { None } )
}
}
@@ -89,7 +89,7 @@ impl<'t> BtreeIter<'t> {
let k = c::bch2_btree_iter_peek_and_restart_outlined(&mut self.raw);
errptr_to_result_c(k.k)
- .map(|_| if !k.k.is_null() { Some(BkeySC{ k: &*k.k, v: &*k.v }) } else { None } )
+ .map(|_| if !k.k.is_null() { Some(BkeySC{ k: &*k.k, v: &*k.v, iter: PhantomData }) } else { None } )
}
}