aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-02-27 22:15:10 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-02-27 22:15:10 -0500
commita3eb6ad8ef34368cbe2da8a39d9749ed6e7cb4e0 (patch)
treeacfeac5767d87df358e7e84732812c8e5a0c9a83
parent5966e59eaeb4033f40ddd84fbe6445598a908163 (diff)
downloadbcachefs-tools-a3eb6ad8ef34368cbe2da8a39d9749ed6e7cb4e0.tar.gz
rust: BtreeIterFlags
This adds a new wrapper type for btree iterator flags. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--rust-src/Cargo.lock1
-rw-r--r--rust-src/bch_bindgen/Cargo.lock3
-rw-r--r--rust-src/bch_bindgen/Cargo.toml2
-rw-r--r--rust-src/bch_bindgen/build.rs3
-rw-r--r--rust-src/bch_bindgen/src/btree.rs27
-rw-r--r--rust-src/src/cmd_list.rs5
6 files changed, 34 insertions, 7 deletions
diff --git a/rust-src/Cargo.lock b/rust-src/Cargo.lock
index 754b1da8..46653733 100644
--- a/rust-src/Cargo.lock
+++ b/rust-src/Cargo.lock
@@ -74,6 +74,7 @@ dependencies = [
"anyhow",
"bindgen",
"bitfield",
+ "bitflags",
"byteorder",
"chrono",
"colored",
diff --git a/rust-src/bch_bindgen/Cargo.lock b/rust-src/bch_bindgen/Cargo.lock
index 3d17e2f4..82d211b5 100644
--- a/rust-src/bch_bindgen/Cargo.lock
+++ b/rust-src/bch_bindgen/Cargo.lock
@@ -41,6 +41,7 @@ dependencies = [
"anyhow",
"bindgen",
"bitfield",
+ "bitflags",
"byteorder",
"chrono",
"colored",
@@ -55,7 +56,7 @@ dependencies = [
[[package]]
name = "bindgen"
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 = [
"bitflags",
"cexpr",
diff --git a/rust-src/bch_bindgen/Cargo.toml b/rust-src/bch_bindgen/Cargo.toml
index 0590c61a..9a9b7a98 100644
--- a/rust-src/bch_bindgen/Cargo.toml
+++ b/rust-src/bch_bindgen/Cargo.toml
@@ -19,7 +19,7 @@ memoffset = "0.8.0"
byteorder = "1.3"
libc = "0.2.69"
gag = "1.0.0"
-
+bitflags = "1.3.2"
[build-dependencies]
pkg-config = "0.3"
diff --git a/rust-src/bch_bindgen/build.rs b/rust-src/bch_bindgen/build.rs
index 22c9777a..74497b81 100644
--- a/rust-src/bch_bindgen/build.rs
+++ b/rust-src/bch_bindgen/build.rs
@@ -30,7 +30,6 @@ fn main() {
.clang_arg("-fkeep-inline-functions")
.derive_debug(true)
.derive_default(true)
- .derive_eq(true)
.layout_tests(true)
.default_enum_style(bindgen::EnumVariation::Rust {
non_exhaustive: true,
@@ -51,6 +50,8 @@ fn main() {
.allowlist_var("BCH_.*")
.allowlist_var("KEY_SPEC_.*")
.allowlist_var("bch.*")
+ .allowlist_var("__BTREE_ITER.*")
+ .allowlist_var("BTREE_ITER.*")
.allowlist_var("POS_MIN")
.allowlist_var("POS_MAX")
.allowlist_var("SPOS_MAX")
diff --git a/rust-src/bch_bindgen/src/btree.rs b/rust-src/bch_bindgen/src/btree.rs
index da9dbca6..405b7527 100644
--- a/rust-src/bch_bindgen/src/btree.rs
+++ b/rust-src/bch_bindgen/src/btree.rs
@@ -4,6 +4,7 @@ use crate::fs::Fs;
use crate::errcode::{bch_errcode, errptr_to_result_c};
use std::mem::MaybeUninit;
use std::ptr;
+use bitflags::bitflags;
pub struct BtreeTrans {
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 {
raw: c::btree_iter,
}
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 {
let mut iter: MaybeUninit<BtreeIter> = MaybeUninit::uninit();
@@ -40,7 +62,7 @@ impl BtreeIter {
&mut (*iter.as_mut_ptr()).raw,
btree as u32,
pos,
- flags);
+ flags.bits as u32);
iter.assume_init()
}
}
@@ -69,7 +91,6 @@ impl BtreeIter {
unsafe {
c::bch2_btree_iter_advance(&mut self.raw);
}
-
}
}
diff --git a/rust-src/src/cmd_list.rs b/rust-src/src/cmd_list.rs
index ea4c93fa..1d71bf9e 100644
--- a/rust-src/src/cmd_list.rs
+++ b/rust-src/src/cmd_list.rs
@@ -4,6 +4,7 @@ use bch_bindgen::bcachefs;
use bch_bindgen::fs::Fs;
use bch_bindgen::btree::BtreeTrans;
use bch_bindgen::btree::BtreeIter;
+use bch_bindgen::btree::BtreeIterFlags;
use clap::Parser;
use colored::Colorize;
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<()> {
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()? {
unsafe {