aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-02-28 00:34:43 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-02-28 00:34:43 -0500
commita999dc0a9f22a2f403defa26d09257f7600a4312 (patch)
treec4ca18c538d80c57b45a54ac0c60ead26b7bf210
parenta8dbc331f071b118ceb6a274880d26b6a9cc8c4b (diff)
downloadbcachefs-tools-a999dc0a9f22a2f403defa26d09257f7600a4312.tar.gz
bcachefs: Annotate BtreeIter with BtreeTrans lifetime
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--rust-src/bch_bindgen/src/btree.rs17
1 files changed, 10 insertions, 7 deletions
diff --git a/rust-src/bch_bindgen/src/btree.rs b/rust-src/bch_bindgen/src/btree.rs
index 405b7527..db5d6c6d 100644
--- a/rust-src/bch_bindgen/src/btree.rs
+++ b/rust-src/bch_bindgen/src/btree.rs
@@ -2,6 +2,7 @@ use crate::SPOS_MAX;
use crate::c;
use crate::fs::Fs;
use crate::errcode::{bch_errcode, errptr_to_result_c};
+use std::marker::PhantomData;
use std::mem::MaybeUninit;
use std::ptr;
use bitflags::bitflags;
@@ -48,22 +49,24 @@ bitflags! {
}
}
-pub struct BtreeIter {
+pub struct BtreeIter<'a> {
raw: c::btree_iter,
+ trans: PhantomData<&'a BtreeTrans>,
}
-impl BtreeIter {
- pub fn new<'a>(trans: &'a BtreeTrans, btree: c::btree_id, pos: c::bpos, flags: BtreeIterFlags) -> BtreeIter {
+impl<'a> BtreeIter<'a> {
+ pub fn new(trans: &'a BtreeTrans, btree: c::btree_id, pos: c::bpos, flags: BtreeIterFlags) -> BtreeIter {
unsafe {
- let mut iter: MaybeUninit<BtreeIter> = MaybeUninit::uninit();
+ let mut iter: MaybeUninit<c::btree_iter> = MaybeUninit::uninit();
c::bch2_trans_iter_init_outlined(
ptr::addr_of!(trans.raw).cast_mut(),
- &mut (*iter.as_mut_ptr()).raw,
+ &mut (*iter.as_mut_ptr()),
btree as u32,
pos,
flags.bits as u32);
- iter.assume_init()
+
+ BtreeIter { raw: iter.assume_init(), trans: PhantomData }
}
}
@@ -94,7 +97,7 @@ impl BtreeIter {
}
}
-impl Drop for BtreeIter {
+impl<'a> Drop for BtreeIter<'a> {
fn drop(&mut self) {
unsafe { c::bch2_trans_iter_exit(self.raw.trans, &mut self.raw) }
}