Index: uspace/srv/fs/ext4fs/ext4fs_ops.c
===================================================================
--- uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 343ccfd8e68d1b8af5ab00c04b07d36ffa854c56)
+++ uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision ebeaaa0657f708565ea32f9b84ed81c2a834feb7)
@@ -444,10 +444,52 @@
 
 
-int ext4fs_unlink(fs_node_t *pfn, fs_node_t *cfn, const char *nm)
-{
-	EXT4FS_DBG("not supported");
-
+int ext4fs_unlink(fs_node_t *pfn, fs_node_t *cfn, const char *name)
+{
+
+	return ENOTSUP;
+
+	int rc;
+
+	bool has_children;
+	rc = ext4fs_has_children(&has_children, cfn);
+	if (rc != EOK) {
+		return rc;
+	}
+
+	// Cannot unlink non-empty node
+	if (has_children) {
+		return ENOTEMPTY;
+	}
+
+	// Remove entry from parent directory
 	// TODO
-	return ENOTSUP;
+//	rc = ext4_directory_remove_entry(EXT4FS_NODE(pfn), name);
+//	if (rc != EOK) {
+//		return rc;
+//	}
+
+	// Decrement links count
+	ext4_inode_ref_t * child_inode_ref = EXT4FS_NODE(cfn)->inode_ref;
+
+	uint32_t lnk_count = ext4_inode_get_links_count(child_inode_ref->inode);
+	lnk_count--;
+	ext4_inode_set_links_count(child_inode_ref->inode, lnk_count);
+
+	child_inode_ref->dirty = true;
+
+	// If directory - handle links from parent
+	if (lnk_count <= 1 && ext4fs_is_directory(cfn)) {
+
+		ext4_inode_ref_t *parent_inode_ref = EXT4FS_NODE(pfn)->inode_ref;
+		uint32_t parent_lnk_count = ext4_inode_get_links_count(
+				parent_inode_ref->inode);
+		parent_lnk_count--;
+		ext4_inode_set_links_count(parent_inode_ref->inode, parent_lnk_count);
+
+		parent_inode_ref->dirty = true;
+	}
+
+
+	return EOK;
 }
 
