diff --git a/src/filesystem.rs b/src/filesystem.rs
index 20471df2464555d3bfbc3f02dfbfa2c16fac9121..ff5a038ae906de26b4d79f21428fafeccb5ba76e 100644
--- a/src/filesystem.rs
+++ b/src/filesystem.rs
@@ -185,7 +185,12 @@ impl FileSystem {
             Ok(())
         } else {
             if parent.1.next == 0 {
-                parent.1.next = self.allocate(1)?;
+                let next = self.allocate(1)?;
+                // Could be mutated by self.allocate if free block
+                if parent.0 == self.header.1.free {
+                    self.read_at(parent.0, &mut parent.1)?;
+                }
+                parent.1.next = next;
                 self.write_at(parent.0, &parent.1)?;
                 self.write_at(parent.1.next, &Node::default())?;
             }