Index: uspace/lib/fdisk/include/fdisk.h
===================================================================
--- uspace/lib/fdisk/include/fdisk.h	(revision b598460af2662df4c20ccda2b3de00d8057bcacd)
+++ uspace/lib/fdisk/include/fdisk.h	(revision 21f154330a64e36a4c6b45d4de538b0a581c0c6b)
@@ -65,4 +65,5 @@
 extern int fdisk_part_get_info(fdisk_part_t *, fdisk_part_info_t *);
 extern int fdisk_part_get_max_avail(fdisk_dev_t *, fdisk_spc_t, fdisk_cap_t *);
+extern int fdisk_part_get_tot_avail(fdisk_dev_t *, fdisk_spc_t, fdisk_cap_t *);
 extern int fdisk_part_create(fdisk_dev_t *, fdisk_part_spec_t *,
     fdisk_part_t **);
Index: uspace/lib/fdisk/src/fdisk.c
===================================================================
--- uspace/lib/fdisk/src/fdisk.c	(revision b598460af2662df4c20ccda2b3de00d8057bcacd)
+++ uspace/lib/fdisk/src/fdisk.c	(revision 21f154330a64e36a4c6b45d4de538b0a581c0c6b)
@@ -763,4 +763,5 @@
 }
 
+/** Get size of largest free block. */
 int fdisk_part_get_max_avail(fdisk_dev_t *dev, fdisk_spc_t spc, fdisk_cap_t *cap)
 {
@@ -783,4 +784,33 @@
 
 	cap->value = nb * dev->dinfo.block_size;
+	cap->cunit = cu_byte;
+	return EOK;
+}
+
+/** Get total free space capacity. */
+int fdisk_part_get_tot_avail(fdisk_dev_t *dev, fdisk_spc_t spc,
+    fdisk_cap_t *cap)
+{
+	fdisk_free_range_t fr;
+	uint64_t hdrb;
+	uint64_t b0;
+	uint64_t nb;
+	uint64_t totb;
+
+	if (spc == spc_log)
+		hdrb = max(1, dev->align);
+	else
+		hdrb = 0;
+
+	totb = 0;
+	fdisk_free_range_first(dev, spc, &fr);
+	do {
+		if (fdisk_free_range_get(&fr, &b0, &nb)) {
+			if (nb > hdrb)
+				totb += nb - hdrb;
+		}
+	} while (fdisk_free_range_next(&fr));
+
+	cap->value = totb * dev->dinfo.block_size;
 	cap->cunit = cu_byte;
 	return EOK;
