summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-05-07 15:52:16 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-05-07 15:52:34 -0400
commit51315289f249fa5569a776eaa98c7ee557b61077 (patch)
tree1c0d07dcbb21c662bb9ecb688a8cbf9f3a750e17 /src
parent401a20ed984b7ccee689202d9372045d41271bcc (diff)
list: Allow for lookups within a particular snapshot
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'src')
-rw-r--r--src/commands/list.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/commands/list.rs b/src/commands/list.rs
index d9a1b460..0ffebd12 100644
--- a/src/commands/list.rs
+++ b/src/commands/list.rs
@@ -15,11 +15,18 @@ use crate::logging;
fn list_keys(fs: &Fs, opt: &Cli) -> anyhow::Result<()> {
let trans = BtreeTrans::new(fs);
+
+ let mut flags = BtreeIterFlags::PREFETCH;
+
+ if opt.start.snapshot == 0 {
+ flags |= BtreeIterFlags::ALL_SNAPSHOTS;
+ }
+
let mut iter = BtreeIter::new(
&trans,
opt.btree,
opt.start,
- BtreeIterFlags::ALL_SNAPSHOTS | BtreeIterFlags::PREFETCH,
+ flags,
);
while let Some(k) = iter.peek_and_restart()? {
@@ -121,6 +128,9 @@ enum Mode {
/// List filesystem metadata in textual form
#[derive(Parser, Debug)]
pub struct Cli {
+ #[arg(short, long, default_value = "keys")]
+ mode: Mode,
+
/// Btree to list from
#[arg(short, long, default_value_t=bcachefs::btree_id::BTREE_ID_extents)]
btree: bcachefs::btree_id,
@@ -141,9 +151,6 @@ pub struct Cli {
#[arg(short, long, default_value = "SPOS_MAX")]
end: bcachefs::bpos,
- #[arg(short, long, default_value = "keys")]
- mode: Mode,
-
/// Check (fsck) the filesystem first
#[arg(short, long)]
fsck: bool,