Index: uspace/lib/c/generic/vol.c
===================================================================
--- uspace/lib/c/generic/vol.c	(revision d858a660afff3b05ffdfe37e6957b83b447f6b26)
+++ uspace/lib/c/generic/vol.c	(revision 1c88835bf782f9f912f952e76e7b8e27382af4f9)
@@ -39,4 +39,5 @@
 #include <loc.h>
 #include <stdlib.h>
+#include <str.h>
 #include <vol.h>
 
@@ -251,13 +252,48 @@
 }
 
+/** Get volume label support. */
+int vol_part_get_lsupp(vol_t *vol, vol_fstype_t fstype,
+    vol_label_supp_t *vlsupp)
+{
+	async_exch_t *exch;
+	sysarg_t retval;
+	ipc_call_t answer;
+
+	exch = async_exchange_begin(vol->sess);
+	aid_t req = async_send_1(exch, VOL_PART_LSUPP, fstype, &answer);
+	int rc = async_data_read_start(exch, vlsupp, sizeof(vol_label_supp_t));
+	async_exchange_end(exch);
+
+	if (rc != EOK) {
+		async_forget(req);
+		return EIO;
+	}
+
+	async_wait_for(req, &retval);
+	if (retval != EOK)
+		return EIO;
+
+	return EOK;
+}
+
 /** Create file system. */
-int vol_part_mkfs(vol_t *vol, service_id_t sid, vol_fstype_t fstype)
-{
-	async_exch_t *exch;
-	int retval;
-
-	exch = async_exchange_begin(vol->sess);
-	retval = async_req_2_0(exch, VOL_PART_MKFS, sid, fstype);
-	async_exchange_end(exch);
+int vol_part_mkfs(vol_t *vol, service_id_t sid, vol_fstype_t fstype,
+    const char *label)
+{
+	async_exch_t *exch;
+	ipc_call_t answer;
+	sysarg_t retval;
+
+	exch = async_exchange_begin(vol->sess);
+	aid_t req = async_send_2(exch, VOL_PART_MKFS, sid, fstype, &answer);
+	retval = async_data_write_start(exch, label, str_size(label));
+	async_exchange_end(exch);
+
+	if (retval != EOK) {
+		async_forget(req);
+		return retval;
+	}
+
+	async_wait_for(req, &retval);
 
 	if (retval != EOK)
Index: uspace/lib/c/include/ipc/vol.h
===================================================================
--- uspace/lib/c/include/ipc/vol.h	(revision d858a660afff3b05ffdfe37e6957b83b447f6b26)
+++ uspace/lib/c/include/ipc/vol.h	(revision 1c88835bf782f9f912f952e76e7b8e27382af4f9)
@@ -43,5 +43,6 @@
 	VOL_PART_INFO,
 	VOL_PART_EMPTY,
-	VOL_PART_MKFS
+	VOL_PART_LSUPP,
+	VOL_PART_MKFS,
 } vol_request_t;
 
Index: uspace/lib/c/include/types/vol.h
===================================================================
--- uspace/lib/c/include/types/vol.h	(revision d858a660afff3b05ffdfe37e6957b83b447f6b26)
+++ uspace/lib/c/include/types/vol.h	(revision 1c88835bf782f9f912f952e76e7b8e27382af4f9)
@@ -38,4 +38,5 @@
 #include <async.h>
 #include <ipc/vol.h>
+#include <stdbool.h>
 
 typedef enum {
@@ -76,4 +77,10 @@
 } vol_part_info_t;
 
+/** Volume label support */
+typedef struct {
+	/** Volume labels are supported */
+	bool supported;
+} vol_label_supp_t;
+
 #endif
 
Index: uspace/lib/c/include/vol.h
===================================================================
--- uspace/lib/c/include/vol.h	(revision d858a660afff3b05ffdfe37e6957b83b447f6b26)
+++ uspace/lib/c/include/vol.h	(revision 1c88835bf782f9f912f952e76e7b8e27382af4f9)
@@ -48,5 +48,6 @@
 extern int vol_part_info(vol_t *, service_id_t, vol_part_info_t *);
 extern int vol_part_empty(vol_t *, service_id_t);
-extern int vol_part_mkfs(vol_t *, service_id_t, vol_fstype_t);
+extern int vol_part_get_lsupp(vol_t *, vol_fstype_t, vol_label_supp_t *);
+extern int vol_part_mkfs(vol_t *, service_id_t, vol_fstype_t, const char *);
 
 #endif
