Index: uspace/srv/fs/minixfs/mfs.h
===================================================================
--- uspace/srv/fs/minixfs/mfs.h	(revision 01accb7c10fb27192bd5f3f05fb1392ef1509f23)
+++ uspace/srv/fs/minixfs/mfs.h	(revision c955be913c2b1bcf936f66665586de462471eb3e)
@@ -48,5 +48,5 @@
 #define NAME		"mfs"
 
-#define DEBUG_MODE
+//#define DEBUG_MODE
 
 #define min(a, b)	((a) < (b) ? (a) : (b))
@@ -211,4 +211,7 @@
 
 extern int
+remove_dentry(struct mfs_node *mnode, const char *d_name);
+
+extern int
 insert_dentry(struct mfs_node *mnode, const char *d_name, fs_index_t d_inum);
 
Index: uspace/srv/fs/minixfs/mfs_dentry.c
===================================================================
--- uspace/srv/fs/minixfs/mfs_dentry.c	(revision 01accb7c10fb27192bd5f3f05fb1392ef1509f23)
+++ uspace/srv/fs/minixfs/mfs_dentry.c	(revision c955be913c2b1bcf936f66665586de462471eb3e)
@@ -141,4 +141,36 @@
 
 int
+remove_dentry(struct mfs_node *mnode, const char *d_name)
+{
+	struct mfs_sb_info *sbi = mnode->instance->sbi;
+	struct mfs_dentry_info *d_info;
+	int i, r;
+
+	const size_t name_len = str_size(d_name);
+
+	if (name_len > sbi->max_name_len)
+		return ENAMETOOLONG;
+
+	/*Search the directory entry to be removed*/
+	for (i = 0; ; ++i) {
+		r = read_directory_entry(mnode, &d_info, i);
+		on_error(r, return r);
+
+		if (!d_info) {
+			/*Reached the end of the dentries list*/
+			break;
+		}
+
+		if (!bcmp(d_info->d_name, d_name, name_len)) {
+			d_info->d_inum = 0;
+			r = write_dentry(d_info);
+			return r;
+		}
+	}
+
+	return ENOENT;
+}
+
+int
 insert_dentry(struct mfs_node *mnode, const char *d_name, fs_index_t d_inum)
 {
@@ -150,5 +182,6 @@
 	const size_t name_len = str_size(d_name);
 
-	assert(name_len <= sbi->max_name_len);
+	if (name_len > sbi->max_name_len)
+		return ENAMETOOLONG;
 
 	/*Search for an empty dentry*/
