diff --git a/src/mount/redox/resource.rs b/src/mount/redox/resource.rs
index e0ef939aead43a5d444acdea0fa2151f84f24a74..04a3af4fd458108cc5d2ab7f64bd2c880679b211 100644
--- a/src/mount/redox/resource.rs
+++ b/src/mount/redox/resource.rs
@@ -13,6 +13,7 @@ use filesystem::FileSystem;
 pub trait Resource<D: Disk> {
     fn block(&self) -> u64;
     fn dup(&self) -> Result<Box<Resource<D>>>;
+    fn set_path(&mut self, path: &str);
     fn read(&mut self, buf: &mut [u8], fs: &mut FileSystem<D>) -> Result<usize>;
     fn write(&mut self, buf: &[u8], fs: &mut FileSystem<D>) -> Result<usize>;
     fn seek(&mut self, offset: usize, whence: usize, fs: &mut FileSystem<D>) -> Result<usize>;
@@ -63,6 +64,10 @@ impl<D: Disk> Resource<D> for DirResource {
         }))
     }
 
+    fn set_path(&mut self, path: &str) {
+        self.path = path.to_string();
+    }
+
     fn read(&mut self, buf: &mut [u8], _fs: &mut FileSystem<D>) -> Result<usize> {
         let data = self.data.as_ref().ok_or(Error::new(EISDIR))?;
         let mut i = 0;
@@ -284,6 +289,10 @@ impl<D: Disk> Resource<D> for FileResource {
         }))
     }
 
+    fn set_path(&mut self, path: &str) {
+        self.path = path.to_string();
+    }
+
     fn read(&mut self, buf: &mut [u8], fs: &mut FileSystem<D>) -> Result<usize> {
         if self.flags & O_ACCMODE == O_RDWR || self.flags & O_ACCMODE == O_RDONLY {
             let count = fs.read_node(self.block, self.seek, buf)?;
diff --git a/src/mount/redox/scheme.rs b/src/mount/redox/scheme.rs
index 6be8e1f26d9429be0cd7f6a7f54dad6676410d83..a935237cc6cbcfb0776ceca9357bc7c6fbd8afa8 100644
--- a/src/mount/redox/scheme.rs
+++ b/src/mount/redox/scheme.rs
@@ -522,8 +522,8 @@ impl<D: Disk> Scheme for FileScheme<D> {
 
         // println!("Frename {}, {} from {}, {}", id, path, uid, gid);
 
-        let files = self.files.borrow_mut();
-        if let Some(file) = files.get(&id) {
+        let mut files = self.files.borrow_mut();
+        if let Some(file) = files.get_mut(&id) {
             //TODO: Check for EINVAL
             // The new pathname contained a path prefix of the old, or, more generally,
             // an attempt was made to make a directory a subdirectory of itself.
@@ -607,6 +607,7 @@ impl<D: Disk> Scheme for FileScheme<D> {
                     fs.insert_blocks(orig.0, BLOCK_SIZE, parent.0)?;
                 }
 
+                file.set_path(path);
                 Ok(0)
             } else {
                 Err(Error::new(EPERM))