Index: uspace/lib/libfs/libfs.c
===================================================================
--- uspace/lib/libfs/libfs.c	(revision 1d8cdb185ad73e3854920a8c26df884d780b3315)
+++ 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 1d8cdb185ad73e3854920a8c26df884d780b3315)
+++ 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 *);
