static int __make_request(struct request_queue *q, struct bio *bio);
 static struct io_context *current_io_context(gfp_t gfp_flags, int node);
 static void blk_recalc_rq_segments(struct request *rq);
+static void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
+                           struct bio *bio);
 
 /*
  * For the allocated request tables
 
 EXPORT_SYMBOL(end_request);
 
-void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
-                    struct bio *bio)
+static void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
+                           struct bio *bio)
 {
        /* first two bits are identical in rq->cmd_flags and bio->bi_rw */
        rq->cmd_flags |= (bio->bi_rw & 3);
        rq->data_len = bio->bi_size;
 
        rq->bio = rq->biotail = bio;
-}
 
-EXPORT_SYMBOL(blk_rq_bio_prep);
+       if (bio->bi_bdev)
+               rq->rq_disk = bio->bi_bdev->bd_disk;
+}
 
 int kblockd_schedule_work(struct work_struct *work)
 {
 
                return NULL;
        }
 
-       rq->bio = rq->biotail = bio;
-       blk_rq_bio_prep(q, rq, bio);
-
-       rq->rq_disk = bdev->bd_contains->bd_disk;
-
-       /* bio backed don't set data */
-       rq->buffer = rq->data = NULL;
-       /* rq data_len used for pc cmd's request_bufflen */
-       rq->data_len = bio->bi_size;
+       blk_rq_append_bio(q, rq, bio);
 
        rq->sense = h->sense;
        memset(rq->sense, 0, SCSI_SENSE_BUFFERSIZE);
 
        return bqt->tag_index[tag];
 }
 
-extern void blk_rq_bio_prep(struct request_queue *, struct request *, struct bio *);
 extern int blkdev_issue_flush(struct block_device *, sector_t *);
 
 #define MAX_PHYS_SEGMENTS 128