diff --git a/zio-sys.c b/zio-sys.c
index 14bf7afcad9fc8b065fa816a38035c8ed258b5aa..09a2d86360af3c8c0c03a33b454ae88d4e051972 100644
--- a/zio-sys.c
+++ b/zio-sys.c
@@ -139,13 +139,19 @@ int zio_fire_trigger(struct zio_ti *ti)
 		/* get samples, and control block */
 		err = zdev->d_op->input_block(chan, block);
 		if (err) {
-			pr_err("%s: no input block for %s:%i:%i\n", __func__,
+			pr_err("%s: input_block(%s:%i:%i) error %d\n", __func__,
 			       chan->cset->zdev->head.name,
 			       chan->cset->index,
-			       chan->index);
-			/* TODO what to do? destroy everything? continue? */
+			       chan->index,
+			       err);
+			zbuf->b_op->free_block(chan->bi, block);
 		}
-		zbuf->b_op->store_block(chan->bi, block);
+		err = zbuf->b_op->store_block(chan->bi, block);
+		if (err) {
+			/* no error message for common error */
+			zbuf->b_op->free_block(chan->bi, block);		      
+		}
+
 	}
 	return 0;
 out_alloc: