mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-02-23 00:00:02 +03:00
rust: BtreeIterFlags
This adds a new wrapper type for btree iterator flags. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
5966e59eae
commit
a3eb6ad8ef
1
rust-src/Cargo.lock
generated
1
rust-src/Cargo.lock
generated
@ -74,6 +74,7 @@ dependencies = [
|
|||||||
"anyhow",
|
"anyhow",
|
||||||
"bindgen",
|
"bindgen",
|
||||||
"bitfield",
|
"bitfield",
|
||||||
|
"bitflags",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"chrono",
|
"chrono",
|
||||||
"colored",
|
"colored",
|
||||||
|
3
rust-src/bch_bindgen/Cargo.lock
generated
3
rust-src/bch_bindgen/Cargo.lock
generated
@ -41,6 +41,7 @@ dependencies = [
|
|||||||
"anyhow",
|
"anyhow",
|
||||||
"bindgen",
|
"bindgen",
|
||||||
"bitfield",
|
"bitfield",
|
||||||
|
"bitflags",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"chrono",
|
"chrono",
|
||||||
"colored",
|
"colored",
|
||||||
@ -55,7 +56,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "bindgen"
|
name = "bindgen"
|
||||||
version = "0.64.0"
|
version = "0.64.0"
|
||||||
source = "git+file:///home/kent/rust-src/rust-bindgen#f773267b090bf16b9e8375fcbdcd8ba5e88806a8"
|
source = "git+https://evilpiepirate.org/git/rust-bindgen.git#f773267b090bf16b9e8375fcbdcd8ba5e88806a8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cexpr",
|
"cexpr",
|
||||||
|
@ -19,7 +19,7 @@ memoffset = "0.8.0"
|
|||||||
byteorder = "1.3"
|
byteorder = "1.3"
|
||||||
libc = "0.2.69"
|
libc = "0.2.69"
|
||||||
gag = "1.0.0"
|
gag = "1.0.0"
|
||||||
|
bitflags = "1.3.2"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
pkg-config = "0.3"
|
pkg-config = "0.3"
|
||||||
|
@ -30,7 +30,6 @@ fn main() {
|
|||||||
.clang_arg("-fkeep-inline-functions")
|
.clang_arg("-fkeep-inline-functions")
|
||||||
.derive_debug(true)
|
.derive_debug(true)
|
||||||
.derive_default(true)
|
.derive_default(true)
|
||||||
.derive_eq(true)
|
|
||||||
.layout_tests(true)
|
.layout_tests(true)
|
||||||
.default_enum_style(bindgen::EnumVariation::Rust {
|
.default_enum_style(bindgen::EnumVariation::Rust {
|
||||||
non_exhaustive: true,
|
non_exhaustive: true,
|
||||||
@ -51,6 +50,8 @@ fn main() {
|
|||||||
.allowlist_var("BCH_.*")
|
.allowlist_var("BCH_.*")
|
||||||
.allowlist_var("KEY_SPEC_.*")
|
.allowlist_var("KEY_SPEC_.*")
|
||||||
.allowlist_var("bch.*")
|
.allowlist_var("bch.*")
|
||||||
|
.allowlist_var("__BTREE_ITER.*")
|
||||||
|
.allowlist_var("BTREE_ITER.*")
|
||||||
.allowlist_var("POS_MIN")
|
.allowlist_var("POS_MIN")
|
||||||
.allowlist_var("POS_MAX")
|
.allowlist_var("POS_MAX")
|
||||||
.allowlist_var("SPOS_MAX")
|
.allowlist_var("SPOS_MAX")
|
||||||
|
@ -4,6 +4,7 @@ use crate::fs::Fs;
|
|||||||
use crate::errcode::{bch_errcode, errptr_to_result_c};
|
use crate::errcode::{bch_errcode, errptr_to_result_c};
|
||||||
use std::mem::MaybeUninit;
|
use std::mem::MaybeUninit;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
use bitflags::bitflags;
|
||||||
|
|
||||||
pub struct BtreeTrans {
|
pub struct BtreeTrans {
|
||||||
raw: c::btree_trans,
|
raw: c::btree_trans,
|
||||||
@ -26,12 +27,33 @@ impl Drop for BtreeTrans {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bitflags! {
|
||||||
|
pub struct BtreeIterFlags: u16 {
|
||||||
|
const SLOTS = c::BTREE_ITER_SLOTS as u16;
|
||||||
|
const ALL_LEVELS = c::BTREE_ITER_ALL_LEVELS as u16;
|
||||||
|
const INTENT = c::BTREE_ITER_INTENT as u16;
|
||||||
|
const PREFETCH = c::BTREE_ITER_PREFETCH as u16;
|
||||||
|
const IS_EXTENTS = c::BTREE_ITER_IS_EXTENTS as u16;
|
||||||
|
const NOT_EXTENTS = c::BTREE_ITER_NOT_EXTENTS as u16;
|
||||||
|
const CACHED = c::BTREE_ITER_CACHED as u16;
|
||||||
|
const KEY_CACHED = c::BTREE_ITER_WITH_KEY_CACHE as u16;
|
||||||
|
const WITH_UPDATES = c::BTREE_ITER_WITH_UPDATES as u16;
|
||||||
|
const WITH_JOURNAL = c::BTREE_ITER_WITH_JOURNAL as u16;
|
||||||
|
const __ALL_SNAPSHOTS = c::__BTREE_ITER_ALL_SNAPSHOTS as u16;
|
||||||
|
const ALL_SNAPSHOTS = c::BTREE_ITER_ALL_SNAPSHOTS as u16;
|
||||||
|
const FILTER_SNAPSHOTS = c::BTREE_ITER_FILTER_SNAPSHOTS as u16;
|
||||||
|
const NOPRESERVE = c::BTREE_ITER_NOPRESERVE as u16;
|
||||||
|
const CACHED_NOFILL = c::BTREE_ITER_CACHED_NOFILL as u16;
|
||||||
|
const KEY_CACHE_FILL = c::BTREE_ITER_KEY_CACHE_FILL as u16;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct BtreeIter {
|
pub struct BtreeIter {
|
||||||
raw: c::btree_iter,
|
raw: c::btree_iter,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BtreeIter {
|
impl BtreeIter {
|
||||||
pub fn new<'a>(trans: &'a BtreeTrans, btree: c::btree_id, pos: c::bpos, flags: u32) -> BtreeIter {
|
pub fn new<'a>(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<BtreeIter> = MaybeUninit::uninit();
|
||||||
|
|
||||||
@ -40,7 +62,7 @@ impl BtreeIter {
|
|||||||
&mut (*iter.as_mut_ptr()).raw,
|
&mut (*iter.as_mut_ptr()).raw,
|
||||||
btree as u32,
|
btree as u32,
|
||||||
pos,
|
pos,
|
||||||
flags);
|
flags.bits as u32);
|
||||||
iter.assume_init()
|
iter.assume_init()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -69,7 +91,6 @@ impl BtreeIter {
|
|||||||
unsafe {
|
unsafe {
|
||||||
c::bch2_btree_iter_advance(&mut self.raw);
|
c::bch2_btree_iter_advance(&mut self.raw);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ use bch_bindgen::bcachefs;
|
|||||||
use bch_bindgen::fs::Fs;
|
use bch_bindgen::fs::Fs;
|
||||||
use bch_bindgen::btree::BtreeTrans;
|
use bch_bindgen::btree::BtreeTrans;
|
||||||
use bch_bindgen::btree::BtreeIter;
|
use bch_bindgen::btree::BtreeIter;
|
||||||
|
use bch_bindgen::btree::BtreeIterFlags;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use colored::Colorize;
|
use colored::Colorize;
|
||||||
use std::ffi::{CStr, OsStr, c_int, c_char};
|
use std::ffi::{CStr, OsStr, c_int, c_char};
|
||||||
@ -11,7 +12,9 @@ use std::os::unix::ffi::OsStrExt;
|
|||||||
|
|
||||||
fn list_keys(fs: &Fs, opt: Cli) -> anyhow::Result<()> {
|
fn list_keys(fs: &Fs, opt: Cli) -> anyhow::Result<()> {
|
||||||
let trans = BtreeTrans::new(fs);
|
let trans = BtreeTrans::new(fs);
|
||||||
let mut iter = BtreeIter::new(&trans, opt.btree, opt.start, 1 << 11);
|
let mut iter = BtreeIter::new(&trans, opt.btree, opt.start,
|
||||||
|
BtreeIterFlags::ALL_SNAPSHOTS|
|
||||||
|
BtreeIterFlags::PREFETCH);
|
||||||
|
|
||||||
while let Some(k) = iter.peek_and_restart()? {
|
while let Some(k) = iter.peek_and_restart()? {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
Loading…
Reference in New Issue
Block a user