]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
rust: BtreeIterFlags
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 28 Feb 2023 03:15:10 +0000 (22:15 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Tue, 28 Feb 2023 03:15:10 +0000 (22:15 -0500)
This adds a new wrapper type for btree iterator flags.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
rust-src/Cargo.lock
rust-src/bch_bindgen/Cargo.lock
rust-src/bch_bindgen/Cargo.toml
rust-src/bch_bindgen/build.rs
rust-src/bch_bindgen/src/btree.rs
rust-src/src/cmd_list.rs

index 754b1da8314e850505c223d97957af0935f609de..4665373382107f7ec6ff33b92658cfa614ebeddc 100644 (file)
@@ -74,6 +74,7 @@ dependencies = [
  "anyhow",
  "bindgen",
  "bitfield",
+ "bitflags",
  "byteorder",
  "chrono",
  "colored",
index 3d17e2f42ad98e6e11315d2292d19e5a931ae075..82d211b557c55268c977d4fdeb33c88b9faa5c12 100644 (file)
@@ -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",
index 0590c61a5d3fd1e4ffb974ee6a30490322cfcc99..9a9b7a98fee5ff5312cd4773a669c7fbb5b9f59d 100644 (file)
@@ -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"
index 22c9777a63cfb3b6499e9d490844b1902b1baf84..74497b816f9b3dbac5ebded2e97e206fce4d8184 100644 (file)
@@ -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")
index da9dbca67af091f041d9793065c81725db05d254..405b7527cc2bf14844e649f5392b955c842f7b80 100644 (file)
@@ -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);
         }
-
     }
 }
 
index ea4c93fa99ceb98583b5c46ed617508fefee946b..1d71bf9e98b2d95ad5e8f3777bece8c1efba68ec 100644 (file)
@@ -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 {