1use crate::raw::{BTRFS_FS_INFO_FLAG_GENERATION, btrfs_ioc_fs_info, btrfs_ioctl_fs_info_args};
7use std::{
8 mem,
9 os::{fd::AsRawFd, unix::io::BorrowedFd},
10};
11use uuid::Uuid;
12
13#[derive(Debug, Clone)]
16pub struct FsInfo {
17 pub uuid: Uuid,
19 pub num_devices: u64,
21 pub max_id: u64,
23 pub nodesize: u32,
25 pub sectorsize: u32,
27 pub generation: u64,
29}
30
31pub fn fs_info(fd: BorrowedFd) -> nix::Result<FsInfo> {
33 let mut raw: btrfs_ioctl_fs_info_args = unsafe { mem::zeroed() };
34 raw.flags = BTRFS_FS_INFO_FLAG_GENERATION as u64;
35 unsafe { btrfs_ioc_fs_info(fd.as_raw_fd(), &mut raw) }?;
36
37 Ok(FsInfo {
38 uuid: Uuid::from_bytes(raw.fsid),
39 num_devices: raw.num_devices,
40 max_id: raw.max_id,
41 nodesize: raw.nodesize,
42 sectorsize: raw.sectorsize,
43 generation: raw.generation,
44 })
45}