Index: uspace/lib/ext4/libext4_directory.c
===================================================================
--- uspace/lib/ext4/libext4_directory.c	(revision 3d4fd2c9ea020e433ba976899d9cdf98ee83a800)
+++ uspace/lib/ext4/libext4_directory.c	(revision d4d29546cc2f320ccec1ba4551094cbd190a6105)
@@ -317,9 +317,4 @@
 	}
 
-	if (rc != EOK) {
-		ext4_directory_iterator_fini(&it);
-		return rc;
-	}
-
 	// TODO modify HTREE index if exists
 
Index: uspace/lib/ext4/libext4_filesystem.c
===================================================================
--- uspace/lib/ext4/libext4_filesystem.c	(revision 3d4fd2c9ea020e433ba976899d9cdf98ee83a800)
+++ uspace/lib/ext4/libext4_filesystem.c	(revision d4d29546cc2f320ccec1ba4551094cbd190a6105)
@@ -387,4 +387,6 @@
 	}
 
+	inode_ref->dirty = true;
+
 	// Free inode
 	rc = ext4_ialloc_free_inode(fs, inode_ref);
@@ -441,6 +443,4 @@
 	for (i = 1; i <= blocks_count; ++i) {
 		// TODO check retval
-		// TODO decrement inode->blocks_count
-
 		ext4_filesystem_release_inode_block(fs, inode_ref, total_blocks - i);
 	}
Index: uspace/lib/ext4/libext4_ialloc.c
===================================================================
--- uspace/lib/ext4/libext4_ialloc.c	(revision 3d4fd2c9ea020e433ba976899d9cdf98ee83a800)
+++ uspace/lib/ext4/libext4_ialloc.c	(revision d4d29546cc2f320ccec1ba4551094cbd190a6105)
@@ -37,4 +37,5 @@
 
 #include <errno.h>
+#include <time.h>
 #include "libext4.h"
 
@@ -90,7 +91,20 @@
 	}
 
+	time_t now = time(NULL);
+	ext4_inode_set_deletion_time(inode_ref->inode, (uint32_t)now);
+	inode_ref->dirty = true;
+
+	// if inode is directory, decrement directories count
+	if (ext4_inode_is_type(fs->superblock, inode_ref->inode, EXT4_INODE_MODE_DIRECTORY)) {
+		uint32_t bg_used_dirs = ext4_block_group_get_used_dirs_count(
+			bg_ref->block_group, fs->superblock);
+		bg_used_dirs--;
+		ext4_block_group_set_used_dirs_count(
+				bg_ref->block_group, fs->superblock, bg_used_dirs);
+	}
+
 	// Update superblock free inodes count
 	uint32_t sb_free_inodes = ext4_superblock_get_free_inodes_count(fs->superblock);
-	sb_free_inodes--;
+	sb_free_inodes++;
 	ext4_superblock_set_free_inodes_count(fs->superblock, sb_free_inodes);
 
