From 123918ed43535d58b110898a2301bba638fd872e Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jeremy@system76.com> Date: Sat, 18 Apr 2020 20:56:19 -0600 Subject: [PATCH] Track the namespace that a description was opened from --- src/context/file.rs | 4 +++- src/syscall/fs.rs | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/context/file.rs b/src/context/file.rs index 51b25476..a274ef74 100644 --- a/src/context/file.rs +++ b/src/context/file.rs @@ -3,12 +3,14 @@ use alloc::sync::Arc; use crate::event; use spin::RwLock; -use crate::scheme::{self, SchemeId}; +use crate::scheme::{self, SchemeNamespace, SchemeId}; use crate::syscall::error::{Result, Error, EBADF}; /// A file description #[derive(Debug)] pub struct FileDescription { + /// The namespace the file was opened from (used for debugging) + pub namespace: SchemeNamespace, /// The scheme that this file refers to pub scheme: SchemeId, /// The number the scheme uses to refer to this file diff --git a/src/syscall/fs.rs b/src/syscall/fs.rs index 0e71fea8..00276f72 100644 --- a/src/syscall/fs.rs +++ b/src/syscall/fs.rs @@ -142,6 +142,7 @@ pub fn open(path: &[u8], flags: usize) -> Result<FileHandle> { let context = context_lock.read(); return context.add_file(FileDescriptor { description: Arc::new(RwLock::new(FileDescription { + namespace: scheme_ns, scheme: scheme_id, number: file_id, flags: flags & !O_CLOEXEC, @@ -163,6 +164,7 @@ pub fn pipe2(fds: &mut [usize], flags: usize) -> Result<usize> { let read_fd = context.add_file(FileDescriptor { description: Arc::new(RwLock::new(FileDescription { + namespace: context.ens, scheme: scheme_id, number: read_id, flags: O_RDONLY | flags & !O_ACCMODE & !O_CLOEXEC, @@ -172,6 +174,7 @@ pub fn pipe2(fds: &mut [usize], flags: usize) -> Result<usize> { let write_fd = context.add_file(FileDescriptor { description: Arc::new(RwLock::new(FileDescription { + namespace: context.ens, scheme: scheme_id, number: write_id, flags: O_WRONLY | flags & !O_ACCMODE & !O_CLOEXEC, @@ -293,6 +296,7 @@ fn duplicate_file(fd: FileHandle, buf: &[u8]) -> Result<FileDescriptor> { Ok(FileDescriptor { description: Arc::new(RwLock::new(FileDescription { + namespace: description.namespace, scheme: description.scheme, number: new_id, flags: description.flags, -- GitLab