bcachefs: Annotate BtreeIter with BtreeTrans lifetime

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
Kent Overstreet 2023-02-28 00:34:43 -05:00
parent a8dbc331f0
commit a999dc0a9f

View File

@ -2,6 +2,7 @@ use crate::SPOS_MAX;
use crate::c; use crate::c;
use crate::fs::Fs; use crate::fs::Fs;
use crate::errcode::{bch_errcode, errptr_to_result_c}; use crate::errcode::{bch_errcode, errptr_to_result_c};
use std::marker::PhantomData;
use std::mem::MaybeUninit; use std::mem::MaybeUninit;
use std::ptr; use std::ptr;
use bitflags::bitflags; use bitflags::bitflags;
@ -48,22 +49,24 @@ bitflags! {
} }
} }
pub struct BtreeIter { pub struct BtreeIter<'a> {
raw: c::btree_iter, raw: c::btree_iter,
trans: PhantomData<&'a BtreeTrans>,
} }
impl BtreeIter { impl<'a> BtreeIter<'a> {
pub fn new<'a>(trans: &'a BtreeTrans, btree: c::btree_id, pos: c::bpos, flags: BtreeIterFlags) -> BtreeIter { pub fn new(trans: &'a BtreeTrans, btree: c::btree_id, pos: c::bpos, flags: BtreeIterFlags) -> BtreeIter {
unsafe { unsafe {
let mut iter: MaybeUninit<BtreeIter> = MaybeUninit::uninit(); let mut iter: MaybeUninit<c::btree_iter> = MaybeUninit::uninit();
c::bch2_trans_iter_init_outlined( c::bch2_trans_iter_init_outlined(
ptr::addr_of!(trans.raw).cast_mut(), ptr::addr_of!(trans.raw).cast_mut(),
&mut (*iter.as_mut_ptr()).raw, &mut (*iter.as_mut_ptr()),
btree as u32, btree as u32,
pos, pos,
flags.bits as u32); 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) { fn drop(&mut self) {
unsafe { c::bch2_trans_iter_exit(self.raw.trans, &mut self.raw) } unsafe { c::bch2_trans_iter_exit(self.raw.trans, &mut self.raw) }
} }