Index: uspace/srv/fs/minixfs/mfs.c
===================================================================
--- uspace/srv/fs/minixfs/mfs.c	(revision 53eb5887bacd6f7ee9d9357fda801a782f8e5502)
+++ uspace/srv/fs/minixfs/mfs.c	(revision d8af1bd5a77474fa3083a3477a2cd6f6567603c3)
@@ -124,4 +124,7 @@
 			mfs_truncate(callid, &call);
 			break;
+		case VFS_OUT_DESTROY:
+			mfs_destroy(callid, &call);
+			break;
 		default:
 			async_answer_0(callid, ENOTSUP);
Index: uspace/srv/fs/minixfs/mfs.h
===================================================================
--- uspace/srv/fs/minixfs/mfs.h	(revision 53eb5887bacd6f7ee9d9357fda801a782f8e5502)
+++ uspace/srv/fs/minixfs/mfs.h	(revision d8af1bd5a77474fa3083a3477a2cd6f6567603c3)
@@ -174,4 +174,7 @@
 mfs_truncate(ipc_callid_t rid, ipc_call_t *request);
 
+extern void
+mfs_destroy(ipc_callid_t rid, ipc_call_t *request);
+
 /*mfs_inode.c*/
 extern int
Index: uspace/srv/fs/minixfs/mfs_ops.c
===================================================================
--- uspace/srv/fs/minixfs/mfs_ops.c	(revision 53eb5887bacd6f7ee9d9357fda801a782f8e5502)
+++ uspace/srv/fs/minixfs/mfs_ops.c	(revision d8af1bd5a77474fa3083a3477a2cd6f6567603c3)
@@ -57,4 +57,5 @@
 static int mfs_link(fs_node_t *pfn, fs_node_t *cfn, const char *name);
 static int mfs_unlink(fs_node_t *, fs_node_t *, const char *name);
+static int mfs_destroy_node(fs_node_t *fn);
 
 static int mfs_node_get(fs_node_t **rfn, devmap_handle_t devmap_handle,
@@ -79,4 +80,5 @@
 	.link = mfs_link,
 	.unlink = mfs_unlink,
+	.destroy = mfs_destroy_node,
 	.plb_get_char = mfs_plb_get_char,
 	.has_children = mfs_has_children,
@@ -819,4 +821,50 @@
 
 void
+mfs_destroy(ipc_callid_t rid, ipc_call_t *request)
+{
+	devmap_handle_t handle = (devmap_handle_t)IPC_GET_ARG1(*request);
+	fs_index_t index = (fs_index_t)IPC_GET_ARG2(*request);
+	fs_node_t *fn;
+	int r;
+
+	r = mfs_node_get(&fn, handle, index);
+	if (r != EOK) {
+		async_answer_0(rid, r);
+		return;
+	}
+	if (!fn) {
+		async_answer_0(rid, ENOENT);
+		return;
+	}
+
+	/*Destroy the inode*/
+	r = mfs_destroy_node(fn);
+	async_answer_0(rid, r);
+}
+
+static int
+mfs_destroy_node(fs_node_t *fn)
+{
+	struct mfs_node *mnode = fn->data;
+	bool has_children;
+	int r;
+
+	r = mfs_has_children(&has_children, fn);
+	on_error(r, return r);
+
+	assert(!has_children);
+
+	/*Free the entire inode content*/
+	r = inode_shrink(mnode, mnode->ino_i->i_size);
+	on_error(r, return r);
+	r = mfs_free_bit(mnode->instance, mnode->ino_i->index, BMAP_INODE);
+	on_error(r, return r);
+
+	free(mnode->ino_i);
+	free(mnode);
+	return r;
+}
+
+void
 mfs_truncate(ipc_callid_t rid, ipc_call_t *request)
 {
