Index: uspace/lib/libfs/libfs.c
===================================================================
--- uspace/lib/libfs/libfs.c	(revision 50e5b255c0a320ca1756e869899101e74bba6d6f)
+++ uspace/lib/libfs/libfs.c	(revision 7782030a5944566e96b3a1307067dc1993fd1a64)
@@ -197,10 +197,13 @@
 					    index);
 				if (nodep) {
-					if (!ops->link(cur, nodep, component)) {
+					int rc;
+
+					rc = ops->link(cur, nodep, component);
+					if (rc != EOK) {
 						if (lflag & L_CREATE) {
 							(void)ops->destroy(
 							    nodep);
 						}
-						ipc_answer_0(rid, ENOSPC);
+						ipc_answer_0(rid, rc);
 					} else {
 						ipc_answer_5(rid, EOK,
@@ -267,8 +270,11 @@
 				nodep = ops->node_get(dev_handle, index);
 			if (nodep) {
-				if (!ops->link(cur, nodep, component)) {
+				int rc;
+
+				rc = ops->link(cur, nodep, component);
+				if (rc != EOK) {
 					if (lflag & L_CREATE)
 						(void)ops->destroy(nodep);
-					ipc_answer_0(rid, ENOSPC);
+					ipc_answer_0(rid, rc);
 				} else {
 					ipc_answer_5(rid, EOK,
Index: uspace/lib/libfs/libfs.h
===================================================================
--- uspace/lib/libfs/libfs.h	(revision 50e5b255c0a320ca1756e869899101e74bba6d6f)
+++ uspace/lib/libfs/libfs.h	(revision 7782030a5944566e96b3a1307067dc1993fd1a64)
@@ -48,5 +48,5 @@
 	void * (* create)(dev_handle_t, int);
 	int (* destroy)(void *);
-	bool (* link)(void *, void *, const char *);
+	int (* link)(void *, void *, const char *);
 	int (* unlink)(void *, void *);
 	fs_index_t (* index_get)(void *);
Index: uspace/srv/fs/fat/fat_ops.c
===================================================================
--- uspace/srv/fs/fat/fat_ops.c	(revision 50e5b255c0a320ca1756e869899101e74bba6d6f)
+++ uspace/srv/fs/fat/fat_ops.c	(revision 7782030a5944566e96b3a1307067dc1993fd1a64)
@@ -224,5 +224,5 @@
 static void *fat_create_node(dev_handle_t, int);
 static int fat_destroy_node(void *);
-static bool fat_link(void *, void *, const char *);
+static int fat_link(void *, void *, const char *);
 static int fat_unlink(void *, void *);
 static void *fat_match(void *, const char *);
@@ -342,7 +342,7 @@
 }
 
-bool fat_link(void *prnt, void *chld, const char *name)
-{
-	return false;	/* not supported at the moment */
+int fat_link(void *prnt, void *chld, const char *name)
+{
+	return ENOTSUP;	/* not supported at the moment */
 }
 
@@ -526,4 +526,8 @@
 };
 
+/*
+ * VFS operations.
+ */
+
 void fat_mounted(ipc_callid_t rid, ipc_call_t *request)
 {
Index: uspace/srv/fs/tmpfs/tmpfs_dump.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision 50e5b255c0a320ca1756e869899101e74bba6d6f)
+++ uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision 7782030a5944566e96b3a1307067dc1993fd1a64)
@@ -60,4 +60,5 @@
 	struct rdentry entry;
 	libfs_ops_t *ops = &tmpfs_libfs_ops;
+	int rc;
 	
 	do {
@@ -94,5 +95,6 @@
 			fname[entry.len] = 0;
 			
-			if (!ops->link((void *) parent, (void *) node, fname)) {
+			rc = ops->link((void *) parent, (void *) node, fname);
+			if (rc != EOK) {
 				ops->destroy((void *) node);
 				free(fname);
@@ -135,6 +137,7 @@
 			}
 			fname[entry.len] = 0;
-			
-			if (!ops->link((void *) parent, (void *) node, fname)) {
+
+			rc = ops->link((void *) parent, (void *) node, fname);
+			if (rc != EOK) {
 				ops->destroy((void *) node);
 				free(fname);
Index: uspace/srv/fs/tmpfs/tmpfs_ops.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs_ops.c	(revision 50e5b255c0a320ca1756e869899101e74bba6d6f)
+++ uspace/srv/fs/tmpfs/tmpfs_ops.c	(revision 7782030a5944566e96b3a1307067dc1993fd1a64)
@@ -76,5 +76,5 @@
 static void tmpfs_node_put(void *);
 static void *tmpfs_create_node(dev_handle_t, int);
-static bool tmpfs_link_node(void *, void *, const char *);
+static int tmpfs_link_node(void *, void *, const char *);
 static int tmpfs_unlink_node(void *, void *);
 static int tmpfs_destroy_node(void *);
@@ -309,5 +309,5 @@
 }
 
-bool tmpfs_link_node(void *prnt, void *chld, const char *nm)
+int tmpfs_link_node(void *prnt, void *chld, const char *nm)
 {
 	tmpfs_dentry_t *parentp = (tmpfs_dentry_t *) prnt;
@@ -318,5 +318,5 @@
 	tmpfs_name_t *namep = malloc(sizeof(tmpfs_name_t));
 	if (!namep)
-		return false;
+		return ENOMEM;
 	tmpfs_name_initialize(namep);
 	size_t len = strlen(nm);
@@ -324,5 +324,5 @@
 	if (!namep->name) {
 		free(namep);
-		return false;
+		return ENOMEM;
 	}
 	strcpy(namep->name, nm);
@@ -344,5 +344,5 @@
 	}
 
-	return true;
+	return EOK;
 }
 
