From a999dc0a9f22a2f403defa26d09257f7600a4312 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 28 Feb 2023 00:34:43 -0500 Subject: [PATCH] bcachefs: Annotate BtreeIter with BtreeTrans lifetime Signed-off-by: Kent Overstreet --- rust-src/bch_bindgen/src/btree.rs | 17 ++++++++++------- 1 file 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 = MaybeUninit::uninit(); + let mut iter: MaybeUninit = 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) } }