Index: uspace/drv/block/ata_bd/main.c
===================================================================
--- uspace/drv/block/ata_bd/main.c	(revision 09ab0a9afc9379f1604c0fd75cac2d9287ba022c)
+++ uspace/drv/block/ata_bd/main.c	(revision 4f87a85ae8e0c4b41a1e0120338b46dd9654fc9c)
@@ -162,4 +162,5 @@
 	ddf_fun_t *fun = NULL;
 	ata_fun_t *afun = NULL;
+	bool bound = false;
 
 	fun_name = ata_fun_name(disk);
@@ -202,5 +203,12 @@
 	}
 
-	ddf_fun_add_to_category(fun, "disk");
+	bound = true;
+
+	rc = ddf_fun_add_to_category(fun, "disk");
+	if (rc != EOK) {
+		ddf_msg(LVL_ERROR, "Failed adding function %s to "
+		    "category 'disk': %s", fun_name, str_error(rc));
+		goto error;
+	}
 
 	free(fun_name);
@@ -208,4 +216,6 @@
 	return EOK;
 error:
+	if (bound)
+		ddf_fun_unbind(fun);
 	if (fun != NULL)
 		ddf_fun_destroy(fun);
Index: uspace/drv/block/ddisk/ddisk.c
===================================================================
--- uspace/drv/block/ddisk/ddisk.c	(revision 09ab0a9afc9379f1604c0fd75cac2d9287ba022c)
+++ uspace/drv/block/ddisk/ddisk.c	(revision 4f87a85ae8e0c4b41a1e0120338b46dd9654fc9c)
@@ -319,4 +319,5 @@
 	errno_t rc;
 	ddf_fun_t *fun = NULL;
+	bool bound = false;
 
 	fun = ddf_fun_create(ddisk->dev, fun_exposed, DDISK_FUN_NAME);
@@ -337,9 +338,18 @@
 	}
 
-	ddf_fun_add_to_category(fun, "disk");
+	bound = true;
+
+	rc = ddf_fun_add_to_category(fun, "disk");
+	if (rc != EOK) {
+		ddf_msg(LVL_ERROR, "Failed adding function %s to category "
+		    "'disk': %s.\n", DDISK_FUN_NAME, str_error(rc));
+		goto error;
+	}
 	ddisk->fun = fun;
 
 	return EOK;
 error:
+	if (bound)
+		ddf_fun_unbind(fun);
 	if (fun != NULL)
 		ddf_fun_destroy(fun);
Index: uspace/drv/block/usbmast/main.c
===================================================================
--- uspace/drv/block/usbmast/main.c	(revision 09ab0a9afc9379f1604c0fd75cac2d9287ba022c)
+++ uspace/drv/block/usbmast/main.c	(revision 4f87a85ae8e0c4b41a1e0120338b46dd9654fc9c)
@@ -223,4 +223,5 @@
 	ddf_fun_t *fun = NULL;
 	usbmast_fun_t *mfun = NULL;
+	bool bound = false;
 
 	if (asprintf(&fun_name, "l%u", lun) < 0) {
@@ -299,5 +300,12 @@
 	}
 
-	ddf_fun_add_to_category(fun, "disk");
+	bound = true;
+
+	rc = ddf_fun_add_to_category(fun, "disk");
+	if (rc != EOK) {
+		usb_log_error("Failed to add function %s to category 'disk': %s.",
+		    fun_name, str_error(rc));
+		goto error;
+	}
 
 	free(fun_name);
@@ -308,4 +316,6 @@
 	/* Error cleanup */
 error:
+	if (bound)
+		ddf_fun_unbind(fun);
 	if (fun != NULL)
 		ddf_fun_destroy(fun);
