Skip to main content

btrfs_cli/subvolume/
get_default.rs

1use crate::{Format, Runnable, util::open_path};
2use anyhow::{Context, Result};
3use btrfs_uapi::subvolume::{FS_TREE_OBJECTID, subvolume_default_get};
4use clap::Parser;
5use std::{os::unix::io::AsFd, path::PathBuf};
6
7/// Show the default subvolume of a filesystem
8#[derive(Parser, Debug)]
9pub struct SubvolumeGetDefaultCommand {
10    /// Path to a mounted btrfs filesystem
11    pub path: PathBuf,
12}
13
14impl Runnable for SubvolumeGetDefaultCommand {
15    fn run(&self, _format: Format, _dry_run: bool) -> Result<()> {
16        let file = open_path(&self.path)?;
17
18        let default_id =
19            subvolume_default_get(file.as_fd()).with_context(|| {
20                format!(
21                    "failed to get default subvolume for '{}'",
22                    self.path.display()
23                )
24            })?;
25
26        if default_id == FS_TREE_OBJECTID {
27            println!("ID 5 (FS_TREE)");
28        } else {
29            // TODO: resolve name via BTRFS_IOC_GET_SUBVOL_INFO + path lookup
30            println!("ID {}", default_id);
31        }
32
33        Ok(())
34    }
35}