From 264d603044dac48c0db6926f807c49de3c90a6a9 Mon Sep 17 00:00:00 2001 From: Matthew Leach Date: Wed, 17 Dec 2025 22:09:03 +0000 Subject: [PATCH] drivers: fs: tmpfs: new Add tmpfs driver and register with the kernel driver's FS subsystem. --- src/drivers/fs/mod.rs | 3 +++ src/drivers/fs/tmpfs.rs | 47 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/drivers/fs/tmpfs.rs diff --git a/src/drivers/fs/mod.rs b/src/drivers/fs/mod.rs index 58382df..42b9e86 100644 --- a/src/drivers/fs/mod.rs +++ b/src/drivers/fs/mod.rs @@ -1,15 +1,18 @@ use alloc::sync::Arc; use dev::DevFsDriver; use fat32::Fat32FsDriver; +use tmpfs::TmpFsDriver; use super::DM; pub mod dev; pub mod fat32; +pub mod tmpfs; pub fn register_fs_drivers() { let mut dm = DM.lock_save_irq(); dm.insert_driver(Arc::new(Fat32FsDriver::new())); dm.insert_driver(Arc::new(DevFsDriver::new())); + dm.insert_driver(Arc::new(TmpFsDriver::new())); } diff --git a/src/drivers/fs/tmpfs.rs b/src/drivers/fs/tmpfs.rs new file mode 100644 index 0000000..1fbf85d --- /dev/null +++ b/src/drivers/fs/tmpfs.rs @@ -0,0 +1,47 @@ +use crate::{arch::ArchImpl, drivers::Driver, fs::FilesystemDriver, memory::{PageOffsetTranslator, page::PgAllocGetter}}; +use alloc::{boxed::Box, sync::Arc}; +use async_trait::async_trait; +use libkernel::{ + error::{KernelError, Result}, + fs::{BlockDevice, Filesystem}, +}; +use log::warn; + +pub struct TmpFsDriver {} + +impl TmpFsDriver { + pub fn new() -> Self { + Self {} + } +} + +impl Driver for TmpFsDriver { + fn name(&self) -> &'static str { + "tmpfs" + } + + fn as_filesystem_driver(self: Arc) -> Option> { + Some(self) + } +} + +#[async_trait] +impl FilesystemDriver for TmpFsDriver { + async fn construct( + &self, + fs_id: u64, + device: Option>, + ) -> Result> { + match device { + Some(_) => { + warn!("Unexpected block device for tmpfs"); + Err(KernelError::InvalidValue) + } + None => Ok(libkernel::fs::filesystems::tmpfs::TmpFs::< + ArchImpl, + PgAllocGetter, + PageOffsetTranslator, + >::new(fs_id)), + } + } +}