Index: uspace/lib/ext4/include/ext4/filesystem.h
===================================================================
--- uspace/lib/ext4/include/ext4/filesystem.h	(revision 21751785b96d50c71310a8d9b941dda5399bd88a)
+++ uspace/lib/ext4/include/ext4/filesystem.h	(revision b209135fccd9282dabef632255a0a7e0b536ab6c)
@@ -41,5 +41,5 @@
 #include "ext4/types.h"
 
-extern errno_t ext4_filesystem_probe(service_id_t);
+extern errno_t ext4_filesystem_probe(service_id_t, ext4_fs_probe_info_t *);
 extern errno_t ext4_filesystem_create(ext4_cfg_ver_t, service_id_t);
 extern errno_t ext4_filesystem_open(ext4_instance_t *, service_id_t,
Index: uspace/lib/ext4/include/ext4/superblock.h
===================================================================
--- uspace/lib/ext4/include/ext4/superblock.h	(revision 21751785b96d50c71310a8d9b941dda5399bd88a)
+++ uspace/lib/ext4/include/ext4/superblock.h	(revision b209135fccd9282dabef632255a0a7e0b536ab6c)
@@ -118,5 +118,6 @@
 extern void ext4_superblock_get_uuid(ext4_superblock_t *, uuid_t *);
 extern void ext4_superblock_set_uuid(ext4_superblock_t *, uuid_t *);
-extern const char *ext4_superblock_get_volume_name(ext4_superblock_t *);
+extern errno_t ext4_superblock_get_volume_name(ext4_superblock_t *, char *,
+    size_t);
 extern void ext4_superblock_set_volume_name(ext4_superblock_t *, const char *);
 extern const char *ext4_superblock_get_last_mounted(ext4_superblock_t *);
Index: uspace/lib/ext4/include/ext4/types.h
===================================================================
--- uspace/lib/ext4/include/ext4/types.h	(revision 21751785b96d50c71310a8d9b941dda5399bd88a)
+++ uspace/lib/ext4/include/ext4/types.h	(revision b209135fccd9282dabef632255a0a7e0b536ab6c)
@@ -235,4 +235,11 @@
 } ext4_filesystem_t;
 
+typedef struct {
+	/** Volume name, to hold 16 latin-1 chars in UTF-8 and null terminator
+	 * we need 2 * 16 + 1 bytes
+	 */
+	char vol_name[33];
+} ext4_fs_probe_info_t;
+
 #define EXT4_BLOCK_GROUP_INODE_UNINIT   0x0001  /* Inode table/bitmap not in use */
 #define EXT4_BLOCK_GROUP_BLOCK_UNINIT   0x0002  /* Block bitmap not in use */
Index: uspace/lib/ext4/src/filesystem.c
===================================================================
--- uspace/lib/ext4/src/filesystem.c	(revision 21751785b96d50c71310a8d9b941dda5399bd88a)
+++ uspace/lib/ext4/src/filesystem.c	(revision b209135fccd9282dabef632255a0a7e0b536ab6c)
@@ -374,9 +374,11 @@
  *
  * @param service_id Block device to probe
+ * @param info Place to store probe information
  *
  * @return EOK or an error code.
  *
  */
-errno_t ext4_filesystem_probe(service_id_t service_id)
+errno_t ext4_filesystem_probe(service_id_t service_id,
+    ext4_fs_probe_info_t *info)
 {
 	ext4_filesystem_t *fs = NULL;
@@ -391,4 +393,11 @@
 	if (rc != EOK) {
 		free(fs);
+		return rc;
+	}
+
+	rc = ext4_superblock_get_volume_name(fs->superblock, info->vol_name,
+	    sizeof(info->vol_name));
+	if (rc != EOK) {
+		ext4_filesystem_fini(fs);
 		return rc;
 	}
Index: uspace/lib/ext4/src/ops.c
===================================================================
--- uspace/lib/ext4/src/ops.c	(revision 21751785b96d50c71310a8d9b941dda5399bd88a)
+++ uspace/lib/ext4/src/ops.c	(revision b209135fccd9282dabef632255a0a7e0b536ab6c)
@@ -908,5 +908,13 @@
 static errno_t ext4_fsprobe(service_id_t service_id, vfs_fs_probe_info_t *info)
 {
-	return ext4_filesystem_probe(service_id);
+	ext4_fs_probe_info_t pinfo;
+	errno_t rc;
+
+	rc = ext4_filesystem_probe(service_id, &pinfo);
+	if (rc != EOK)
+		return rc;
+
+	memcpy(info->label, pinfo.vol_name, sizeof(pinfo.vol_name));
+	return EOK;
 }
 
Index: uspace/lib/ext4/src/superblock.c
===================================================================
--- uspace/lib/ext4/src/superblock.c	(revision 21751785b96d50c71310a8d9b941dda5399bd88a)
+++ uspace/lib/ext4/src/superblock.c	(revision b209135fccd9282dabef632255a0a7e0b536ab6c)
@@ -44,4 +44,5 @@
 #include <mem.h>
 #include <stdlib.h>
+#include <str.h>
 #include <time.h>
 #include "ext4/cfg.h"
@@ -883,7 +884,26 @@
  *
  */
-const char *ext4_superblock_get_volume_name(ext4_superblock_t *sb)
-{
-	return sb->volume_name;
+errno_t ext4_superblock_get_volume_name(ext4_superblock_t *sb, char *buf,
+    size_t bufsz)
+{
+	size_t i;
+	size_t wi;
+	wchar_t ch;
+	errno_t rc;
+
+	i = 0;
+	wi = 0;
+	while (sb->volume_name[i] != '\0' && i < sizeof(sb->volume_name)) {
+		/* ISO 8859-1 codes map to identical Unicode code points */
+		ch = (wchar_t)(uint8_t)sb->volume_name[i];
+		rc = chr_encode(ch, buf, &wi, bufsz - 1);
+		if (rc != EOK)
+			return rc;
+
+		i++;
+	}
+
+	buf[wi] = '\0';
+	return EOK;
 }
 
