Index: uspace/lib/c/generic/io/con_srv.c
===================================================================
--- uspace/lib/c/generic/io/con_srv.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
+++ uspace/lib/c/generic/io/con_srv.c	(revision 86bbca413cd4472a041d8633c827dff484ee576a)
@@ -93,6 +93,7 @@
 	}
 
-	rc = srv->srvs->ops->read(srv, buf, size);
-	if (rc < 0) {
+	size_t nread;
+	rc = srv->srvs->ops->read(srv, buf, size, &nread);
+	if (rc != EOK) {
 		async_answer_0(rcallid, rc);
 		async_answer_0(callid, rc);
@@ -101,11 +102,8 @@
 	}
 
-	async_data_read_finalize(rcallid, buf, size);
+	async_data_read_finalize(rcallid, buf, nread);
 	free(buf);
 
-	if (rc >= 0)
-		async_answer_1(callid, EOK, rc);
-	else
-		async_answer_0(callid, rc);
+	async_answer_1(callid, EOK, nread);
 }
 
@@ -128,11 +126,9 @@
 	}
 
-	rc = srv->srvs->ops->write(srv, data, size);
+	size_t nwritten = 0;
+	rc = srv->srvs->ops->write(srv, data, size, &nwritten);
 	free(data);
 
-	if (rc >= 0)
-		async_answer_1(callid, EOK, rc);
-	else
-		async_answer_0(callid, rc);
+	async_answer_1(callid, rc, nwritten);
 }
 
