Index: uspace/srv/fs/fat/fat_ops.c
===================================================================
--- uspace/srv/fs/fat/fat_ops.c	(revision ddd1219e83dcd1ca6500e0026c3a42de9be8d8fb)
+++ uspace/srv/fs/fat/fat_ops.c	(revision be8f92dcc21f53e3286eecd26b1eee08c71645e8)
@@ -738,4 +738,5 @@
 	rootp->firstc = FAT_CLST_ROOT;
 	rootp->refcnt = 1;
+	rootp->lnkcnt = 0;	/* FS root is not linked */
 	rootp->size = rde * sizeof(fat_dentry_t);
 	rootp->idx = ridxp;
@@ -744,5 +745,5 @@
 	futex_up(&ridxp->lock);
 
-	ipc_answer_0(rid, EOK);
+	ipc_answer_3(rid, EOK, ridxp->index, rootp->size, rootp->lnkcnt);
 }
 
Index: uspace/srv/fs/tmpfs/tmpfs_ops.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs_ops.c	(revision ddd1219e83dcd1ca6500e0026c3a42de9be8d8fb)
+++ uspace/srv/fs/tmpfs/tmpfs_ops.c	(revision be8f92dcc21f53e3286eecd26b1eee08c71645e8)
@@ -234,5 +234,5 @@
 		return false;
 	}
-	root->lnkcnt = 1;
+	root->lnkcnt = 0;	/* FS root is not linked */
 	return true;
 }
@@ -406,9 +406,10 @@
 	if (dev_handle >= 0) {
 		if (tmpfs_restore(dev_handle))
-			ipc_answer_0(rid, EOK);
+			ipc_answer_3(rid, EOK, root->index, root->size,
+			    root->lnkcnt);
 		else
 			ipc_answer_0(rid, ELIMIT);
 	} else {
-			ipc_answer_0(rid, EOK);
+		ipc_answer_3(rid, EOK, root->index, root->size, root->lnkcnt);
 	}
 }
Index: uspace/srv/vfs/vfs_ops.c
===================================================================
--- uspace/srv/vfs/vfs_ops.c	(revision ddd1219e83dcd1ca6500e0026c3a42de9be8d8fb)
+++ uspace/srv/vfs/vfs_ops.c	(revision be8f92dcc21f53e3286eecd26b1eee08c71645e8)
@@ -206,4 +206,10 @@
 		/* We still don't have the root file system mounted. */
 		if ((size == 1) && (buf[0] == '/')) {
+			vfs_lookup_res_t mr_res;
+			vfs_node_t *mr_node;
+			ipcarg_t rindex;
+			ipcarg_t rsize;
+			ipcarg_t rlnkcnt;
+		
 			/*
 			 * For this simple, but important case,
@@ -214,14 +220,28 @@
 			/* Tell the mountee that it is being mounted. */
 			phone = vfs_grab_phone(fs_handle);
-			rc = async_req_1_0(phone, VFS_MOUNTED,
-			    (ipcarg_t) dev_handle);
+			rc = async_req_1_3(phone, VFS_MOUNTED,
+			    (ipcarg_t) dev_handle, &rindex, &rsize, &rlnkcnt);
 			vfs_release_phone(phone);
-
-			if (rc == EOK) {
-				rootfs.fs_handle = fs_handle;
-				rootfs.dev_handle = dev_handle;
+			
+			if (rc != EOK) {
+				futex_up(&rootfs_futex);
+				ipc_answer_0(rid, rc);
+				return;
 			}
 
+			mr_res.triplet.fs_handle = fs_handle;
+			mr_res.triplet.dev_handle = dev_handle;
+			mr_res.triplet.index = (fs_index_t) rindex;
+			mr_res.size = (size_t) rsize;
+			mr_res.lnkcnt = (unsigned) rlnkcnt;
+
+			rootfs.fs_handle = fs_handle;
+			rootfs.dev_handle = dev_handle;
 			futex_up(&rootfs_futex);
+
+			/* Add reference to the mounted root. */
+			mr_node = vfs_node_get(&mr_res); 
+			assert(mr_node);
+
 			ipc_answer_0(rid, rc);
 			return;
