/* Only changed by ubd_init, which is an initcall. */
 int thread_fd = -1;
 
-static void ubd_end_request(struct request *req, int bytes, int uptodate)
+static void ubd_end_request(struct request *req, int bytes, int error)
 {
-       if (!end_that_request_first(req, uptodate, bytes >> 9)) {
-               struct ubd *dev = req->rq_disk->private_data;
-               unsigned long flags;
-
-               add_disk_randomness(req->rq_disk);
-               spin_lock_irqsave(&dev->lock, flags);
-               end_that_request_last(req, uptodate);
-               spin_unlock_irqrestore(&dev->lock, flags);
-       }
+       blk_end_request(req, error, bytes);
 }
 
 /* Callable only from interrupt context - otherwise you need to do
 static inline void ubd_finish(struct request *req, int bytes)
 {
        if(bytes < 0){
-               ubd_end_request(req, 0, 0);
+               ubd_end_request(req, 0, -EIO);
                return;
        }
-       ubd_end_request(req, bytes, 1);
+       ubd_end_request(req, bytes, 0);
 }
 
 static LIST_HEAD(restart);