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