vdc_finish(&port->vio, -err, WAITING_FOR_GEN_CMD);
 }
 
-static void vdc_end_request(struct request *req, int uptodate, int num_sectors)
+static void vdc_end_request(struct request *req, int error, int num_sectors)
 {
-       if (end_that_request_first(req, uptodate, num_sectors))
-               return;
-       add_disk_randomness(req->rq_disk);
-       end_that_request_last(req, uptodate);
+       __blk_end_request(req, error, num_sectors << 9);
 }
 
 static void vdc_end_one(struct vdc_port *port, struct vio_dring_state *dr,
 
        rqe->req = NULL;
 
-       vdc_end_request(req, !desc->status, desc->size >> 9);
+       vdc_end_request(req, (desc->status ? -EIO : 0), desc->size >> 9);
 
        if (blk_queue_stopped(port->disk->queue))
                blk_start_queue(port->disk->queue);
 
                blkdev_dequeue_request(req);
                if (__send_request(req) < 0)
-                       vdc_end_request(req, 0, req->hard_nr_sectors);
+                       vdc_end_request(req, -EIO, req->hard_nr_sectors);
        }
 }