diff --git a/src/filesystem.rs b/src/filesystem.rs
index 38408f4df706471899d7b29f58ba10262e3a959c..a625052b9ec9f88f48ccfd1f26bfec1758745ffb 100644
--- a/src/filesystem.rs
+++ b/src/filesystem.rs
@@ -265,6 +265,7 @@ impl FileSystem {
                 }
             }
 
+            self.node_set_len(node.0, 0)?;
             self.remove_blocks(node.0, 1, parent_block)?;
             self.write_at(node.0, &Node::default())?;
 
@@ -331,7 +332,11 @@ impl FileSystem {
         let mut node = self.node(block)?;
         for mut extent in node.1.extents.iter_mut() {
             if extent.length > length {
-                //TODO: self.deallocate(block, 512)?;
+                let start = (length + 511)/512;
+                let end = (extent.length + 511)/512
+                if end > start {
+                    self.deallocate(extent.block + start, (end - start) * 512)?;
+                }
                 extent.length = length;
                 changed = true;
                 length = 0;