Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision 582a0b84b0a73672531e7b404a89997af41ba0b9)
+++ uspace/srv/vfs/vfs.h	(revision 81dd2edaddd4f5ceb84c52eabccc844c4c1a5661)
@@ -206,4 +206,5 @@
 
 extern int vfs_op_clone(int oldfd, int newfd, bool desc);
+extern int vfs_op_fsprobe(const char *, service_id_t, vfs_fs_probe_info_t *);
 extern int vfs_op_mount(int mpfd, unsigned servid, unsigned flags, unsigned instance, const char *opts, const char *fsname, int *outfd);
 extern int vfs_op_mtab_get(void);
Index: uspace/srv/vfs/vfs_ipc.c
===================================================================
--- uspace/srv/vfs/vfs_ipc.c	(revision 582a0b84b0a73672531e7b404a89997af41ba0b9)
+++ uspace/srv/vfs/vfs_ipc.c	(revision 81dd2edaddd4f5ceb84c52eabccc844c4c1a5661)
@@ -45,4 +45,41 @@
 }
 
+static void vfs_in_fsprobe(ipc_callid_t rid, ipc_call_t *request)
+{
+	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*request);
+	char *fs_name = NULL;
+	ipc_callid_t callid;
+	vfs_fs_probe_info_t info;
+	size_t len;
+	int rc;
+	
+	/*
+	 * Now we expect the client to send us data with the name of the file 
+	 * system.
+	 */
+	rc = async_data_write_accept((void **) &fs_name, true, 0,
+	    FS_NAME_MAXLEN, 0, NULL);
+	if (rc != EOK) {
+		async_answer_0(rid, rc);
+		return;
+	}
+	
+	rc = vfs_op_fsprobe(fs_name, service_id, &info);
+	async_answer_0(rid, rc);
+	if (rc != EOK)
+		goto out;
+	
+	/* Now we should get a read request */
+	if (!async_data_read_receive(&callid, &len))
+		goto out;
+
+	if (len > sizeof(info))
+		len = sizeof(info);
+	(void) async_data_read_finalize(callid, &info, len);
+
+out:
+	free(fs_name);
+}
+
 static void vfs_in_fstypes(ipc_callid_t rid, ipc_call_t *request)
 {
@@ -297,4 +334,7 @@
 			vfs_in_clone(callid, &call);
 			break;
+		case VFS_IN_FSPROBE:
+			vfs_in_fsprobe(callid, &call);
+			break;
 		case VFS_IN_FSTYPES:
 			vfs_in_fstypes(callid, &call);
Index: uspace/srv/vfs/vfs_ops.c
===================================================================
--- uspace/srv/vfs/vfs_ops.c	(revision 582a0b84b0a73672531e7b404a89997af41ba0b9)
+++ uspace/srv/vfs/vfs_ops.c	(revision 81dd2edaddd4f5ceb84c52eabccc844c4c1a5661)
@@ -190,4 +190,38 @@
 }
 
+int vfs_op_fsprobe(const char *fs_name, service_id_t sid,
+    vfs_fs_probe_info_t *info)
+{
+	fs_handle_t fs_handle = 0;
+	sysarg_t rc;
+	int retval;
+	
+	fibril_mutex_lock(&fs_list_lock);
+	fs_handle = fs_name_to_handle(0, fs_name, false);
+	fibril_mutex_unlock(&fs_list_lock);
+	
+	if (fs_handle == 0)
+		return ENOFS;
+	
+	/* Send probe request to the file system server */
+	ipc_call_t answer;
+	async_exch_t *exch = vfs_exchange_grab(fs_handle);
+	aid_t msg = async_send_1(exch, VFS_OUT_FSPROBE, (sysarg_t) sid,
+	    &answer);
+	if (msg == 0)
+		return EINVAL;
+	
+	/* Read probe information */
+	retval = async_data_read_start(exch, info, sizeof(*info));
+	if (retval != EOK) {
+		async_forget(msg);
+		return retval;
+	}
+	
+	async_wait_for(msg, &rc);
+	vfs_exchange_release(exch);
+	return rc;
+}
+
 int vfs_op_mount(int mpfd, unsigned service_id, unsigned flags,
     unsigned instance, const char *opts, const char *fs_name, int *outfd)
