Skip to content

Commit

Permalink
Change major/minor format into version format
Browse files Browse the repository at this point in the history
Signed-off-by: Poxxy <41162160+Poxxy@users.noreply.github.com>
  • Loading branch information
jklott committed Jan 2, 2024
1 parent d7e27be commit a4627e9
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 35 deletions.
6 changes: 2 additions & 4 deletions doc/metadata.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,7 @@

// chr
struct {
dev_t major;
dev_t minor;
dev_t version;
},

// dir
Expand All @@ -102,8 +101,7 @@
// blk; do we even want these? seems like maybe not since they're
// system specific.
struct {
dev_t major;
dev_t minor;
version;
},

// reg
Expand Down
8 changes: 4 additions & 4 deletions puzzlefs-lib/src/extractor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,11 @@ pub fn extract_rootfs(oci_dir: &str, tag: &str, extract_dir: &str) -> anyhow::Re
InodeMode::Fifo => {
mkfifo(&path, Mode::S_IRWXU)?;
}
InodeMode::Chr { major, minor } => {
mknod(&path, SFlag::S_IFCHR, Mode::S_IRWXU, makedev(major, minor))?;
InodeMode::Chr { version } => {
mknod(&path, SFlag::S_IFCHR, Mode::S_IRWXU, makedev(version, 0))?;
}
InodeMode::Blk { major, minor } => {
mknod(&path, SFlag::S_IFBLK, Mode::S_IRWXU, makedev(major, minor))?;
InodeMode::Blk { version } => {
mknod(&path, SFlag::S_IFBLK, Mode::S_IRWXU, makedev(version, 0))?;
}
InodeMode::Lnk => {
let target = dir_entry.inode.symlink_target()?;
Expand Down
6 changes: 2 additions & 4 deletions puzzlefs-lib/src/format/metadata.capnp
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
@0x84ae5e6e88b7cbb7;

struct Chr {
major@0: UInt64;
minor@1: UInt64;
version@0: UInt64;
}

struct DirEntry {
Expand All @@ -16,8 +15,7 @@ struct Dir {
}

struct Blk {
major@0: UInt64;
minor@1: UInt64;
version@0: UInt64;
}

struct FileChunk {
Expand Down
36 changes: 13 additions & 23 deletions puzzlefs-lib/src/format/types.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use capnp::{message, serialize};
use memmap2::{Mmap, MmapOptions};
use nix::errno::Errno;
use nix::sys::stat;
use std::backtrace::Backtrace;
use std::collections::BTreeMap;
use std::convert::{TryFrom, TryInto};
Expand Down Expand Up @@ -243,10 +242,7 @@ mod tests {
},
Inode {
ino: 65343,
mode: InodeMode::Chr {
major: 64,
minor: 65536,
},
mode: InodeMode::Chr { version: 64 },
uid: 10,
gid: 10000,
permissions: DEFAULT_DIRECTORY_PERMISSIONS,
Expand Down Expand Up @@ -372,18 +368,16 @@ impl Inode {
let mode = if file_type.is_fifo() {
InodeMode::Fifo
} else if file_type.is_char_device() {
let major = stat::major(md.rdev());
let minor = stat::minor(md.rdev());
InodeMode::Chr { major, minor }
let version = md.rdev();
InodeMode::Chr { version }
} else if file_type.is_dir() {
return Err(io::Error::new(
io::ErrorKind::Other,
format!("{ino} is a dir"),
));
} else if file_type.is_block_device() {
let major = stat::major(md.rdev());
let minor = stat::minor(md.rdev());
InodeMode::Blk { major, minor }
let version = md.rdev();
InodeMode::Blk { version }
} else if file_type.is_file() {
return Err(io::Error::new(
io::ErrorKind::Other,
Expand Down Expand Up @@ -480,9 +474,9 @@ impl Inode {
pub enum InodeMode {
Unknown,
Fifo,
Chr { major: u64, minor: u64 },
Chr { version: u64 },
Dir { dir_list: DirList },
Blk { major: u64, minor: u64 },
Blk { version: u64 },
File { chunks: Vec<FileChunk> },
Lnk,
Sock,
Expand All @@ -500,15 +494,13 @@ impl InodeMode {
Ok(crate::metadata_capnp::inode::mode::Chr(reader)) => {
let r = reader?;
Ok(InodeMode::Chr {
major: r.get_major(),
minor: r.get_minor(),
version: r.get_version(),
})
}
Ok(crate::metadata_capnp::inode::mode::Blk(reader)) => {
let r = reader?;
Ok(InodeMode::Blk {
major: r.get_major(),
minor: r.get_minor(),
version: r.get_version(),
})
}
Ok(crate::metadata_capnp::inode::mode::File(reader)) => {
Expand Down Expand Up @@ -554,10 +546,9 @@ impl InodeMode {
match &self {
Self::Unknown => builder.set_unknown(()),
Self::Fifo => builder.set_fifo(()),
Self::Chr { major, minor } => {
Self::Chr { version } => {
let mut chr_builder = builder.reborrow().init_chr();
chr_builder.set_minor(*minor);
chr_builder.set_major(*major);
chr_builder.set_version(*version);
}
Self::Dir { dir_list } => {
let mut dir_builder = builder.reborrow().init_dir();
Expand All @@ -572,10 +563,9 @@ impl InodeMode {
dir_entry_builder.set_name(&entry.name);
}
}
Self::Blk { major, minor } => {
Self::Blk { version } => {
let mut blk_builder = builder.reborrow().init_blk();
blk_builder.set_minor(*minor);
blk_builder.set_major(*major);
blk_builder.set_version(*version);
}
Self::File { chunks } => {
let chunks_len = chunks.len().try_into()?;
Expand Down

0 comments on commit a4627e9

Please sign in to comment.