diff --git a/src/bin/mount.rs b/src/bin/mount.rs index 452fe9d30e..d91654110a 100644 --- a/src/bin/mount.rs +++ b/src/bin/mount.rs @@ -1,4 +1,4 @@ -//#![deny(warnings)] +#![deny(warnings)] #![cfg_attr(unix, feature(libc))] #[cfg(unix)] @@ -10,22 +10,19 @@ extern crate syscall; extern crate redoxfs; extern crate uuid; -use redoxfs::{DiskCache, DiskFile, mount}; use std::env; use std::fs::File; use std::io::{Read, Write}; use std::os::unix::io::FromRawFd; use std::process; -use std::sync::atomic::Ordering; + +use redoxfs::{DiskCache, DiskFile, mount}; use uuid::Uuid; -#[cfg(target_os = "redox")] -use syscall::{sigaction, SigAction, SIGTERM}; -use redoxfs::IS_UMT; - #[cfg(target_os = "redox")] extern "C" fn unmount_handler(_s: usize) { - IS_UMT.store(1, Ordering::SeqCst); + use std::sync::atomic::Ordering; + redoxfs::IS_UMT.store(1, Ordering::SeqCst); } #[cfg(target_os = "redox")] @@ -33,6 +30,8 @@ extern "C" fn unmount_handler(_s: usize) { //for, so I put 2. I don't think 0,0 is a valid sa_mask. I don't know what i'm doing here. When u //send it a sigkill, it shuts off the filesystem fn setsig() { + use syscall::{sigaction, SigAction, SIGTERM}; + let sig_action = SigAction { sa_handler: unmount_handler, sa_mask: [0,0], diff --git a/src/filesystem.rs b/src/filesystem.rs index da1745e537..1e7996631a 100644 --- a/src/filesystem.rs +++ b/src/filesystem.rs @@ -19,8 +19,6 @@ impl FileSystem { disk.read_at(block + header.0, &mut header.1)?; if header.1.valid() { - header.1.dirty = true; - disk.write_at(header.0, &header.1)?; let mut root = (header.1.root, Node::default()); disk.read_at(block + root.0, &mut root.1)?; @@ -38,12 +36,6 @@ impl FileSystem { Err(Error::new(ENOENT)) } - pub fn close(&mut self) -> Result<()> { - self.header.1.dirty = false; - self.disk.write_at(self.header.0, &self.header.1)?; - Ok(()) - } - /// Create a file system on a disk pub fn create(disk: D, ctime: u64, ctime_nsec: u32) -> Result { Self::create_reserved(disk, &[], ctime, ctime_nsec) diff --git a/src/header.rs b/src/header.rs index 5abe4c4526..ee11337483 100644 --- a/src/header.rs +++ b/src/header.rs @@ -20,10 +20,8 @@ pub struct Header { pub root: u64, /// Block of free space node pub free: u64, - /// True if the filesystem is currently mounted - pub dirty: bool, /// Padding - pub padding: [u8; BLOCK_SIZE as usize - 57] + pub padding: [u8; BLOCK_SIZE as usize - 56] } impl Header { @@ -35,8 +33,7 @@ impl Header { size: 0, root: 0, free: 0, - dirty:false, - padding: [0; BLOCK_SIZE as usize - 57] + padding: [0; BLOCK_SIZE as usize - 56] } } @@ -49,8 +46,7 @@ impl Header { size: size, root: root, free: free, - dirty:false, - padding: [0; BLOCK_SIZE as usize - 57] + padding: [0; BLOCK_SIZE as usize - 56] } } diff --git a/src/mount/fuse.rs b/src/mount/fuse.rs index 43803737c8..4b03fed0a6 100644 --- a/src/mount/fuse.rs +++ b/src/mount/fuse.rs @@ -4,7 +4,6 @@ extern crate time; use std::cmp; use std::ffi::OsStr; use std::io; -use std::io::{ErrorKind, Error}; use std::os::unix::ffi::OsStrExt; use std::path::Path; use std::time::{SystemTime, UNIX_EPOCH}; @@ -28,10 +27,7 @@ pub fn mount, F: FnMut()>(filesystem: filesystem::FileSy callback(); - session.run()?; - - session.filesystem.fs.close().map_err(|e| Error::new(ErrorKind::Interrupted,format!("{}",e))) - + session.run() } pub struct Fuse { diff --git a/src/mount/redox/mod.rs b/src/mount/redox/mod.rs index b0a03be220..f4a8cb06a9 100644 --- a/src/mount/redox/mod.rs +++ b/src/mount/redox/mod.rs @@ -3,7 +3,7 @@ extern crate spin; use syscall; use syscall::{Packet, Scheme}; use std::fs::File; -use std::io::{Error, ErrorKind, Read, Result, Write}; +use std::io::{self, Read, Write}; use std::path::Path; use std::sync::atomic::Ordering; @@ -16,7 +16,7 @@ use self::scheme::FileScheme; pub mod resource; pub mod scheme; -pub fn mount, F: FnMut()>(filesystem: FileSystem, mountpoint: &P, mut callback: F) -> Result<()> { +pub fn mount, F: FnMut()>(filesystem: FileSystem, mountpoint: &P, mut callback: F) -> io::Result<()> { let mountpoint = mountpoint.as_ref(); let mut socket = File::create(format!(":{}", mountpoint.display()))?; @@ -25,7 +25,7 @@ pub fn mount, F: FnMut()>(filesystem: FileSystem, mou syscall::setrens(0, 0).expect("redoxfs: failed to enter null namespace"); let scheme = FileScheme::new(format!("{}", mountpoint.display()), filesystem); - let res = loop { + loop { if IS_UMT.load(Ordering::SeqCst) > 0 { break Ok(()); } @@ -33,7 +33,7 @@ pub fn mount, F: FnMut()>(filesystem: FileSystem, mou let mut packet = Packet::default(); match socket.read(&mut packet) { Ok(_ok) => (), - Err(err) => if err.kind() == ErrorKind::Interrupted { + Err(err) => if err.kind() == io::ErrorKind::Interrupted { continue; } else { break Err(err); @@ -48,12 +48,5 @@ pub fn mount, F: FnMut()>(filesystem: FileSystem, mou break Err(err); } } - }; - - { - let mut fs = scheme.fs.borrow_mut(); - fs.close().map_err(|e| Error::new(ErrorKind::Interrupted,format!("{}",e)))?; } - - res } diff --git a/src/mount/redox/scheme.rs b/src/mount/redox/scheme.rs index 2065a0bd38..a5ce3be516 100644 --- a/src/mount/redox/scheme.rs +++ b/src/mount/redox/scheme.rs @@ -89,7 +89,7 @@ impl Fmaps { pub struct FileScheme { name: String, - pub(crate) fs: RefCell>, + fs: RefCell>, next_id: AtomicUsize, files: Mutex>>>, fmaps: Mutex