{
        if (mmc_card_removed(card))
                req->rq_flags |= RQF_QUIET;
 -      while (blk_end_request(req, -EIO, blk_rq_cur_bytes(req)));
 +      while (blk_end_request(req, BLK_STS_IOERR, blk_rq_cur_bytes(req)));
-       mmc_queue_req_free(mq, mqrq);
+       mq->qcnt--;
  }
  
  /**
         */
        if (mmc_card_removed(mq->card)) {
                req->rq_flags |= RQF_QUIET;
 -              blk_end_request_all(req, -EIO);
 +              blk_end_request_all(req, BLK_STS_IOERR);
-               mmc_queue_req_free(mq, mqrq);
+               mq->qcnt--; /* FIXME: just set to 0? */
                return;
        }
        /* Else proceed and try to restart the current async request */
                         * time, so we only reach here after trying to
                         * read a single sector.
                         */
 -                      req_pending = blk_end_request(old_req, -EIO,
 +                      req_pending = blk_end_request(old_req, BLK_STS_IOERR,
                                                      brq->data.blksz);
                        if (!req_pending) {
-                               mmc_queue_req_free(mq, mq_rq);
+                               mq->qcnt--;
                                mmc_blk_rw_try_restart(mq, new_req, mqrq_cur);
                                return;
                        }
 
        if (mmc_can_erase(card))
                mmc_queue_setup_discard(mq->queue, card);
  
+       card->bouncesz = mmc_queue_calc_bouncesz(host);
        if (card->bouncesz) {
 -              blk_queue_bounce_limit(mq->queue, BLK_BOUNCE_ANY);
                blk_queue_max_hw_sectors(mq->queue, card->bouncesz / 512);
                blk_queue_max_segments(mq->queue, card->bouncesz / 512);
                blk_queue_max_segment_size(mq->queue, card->bouncesz);