Skip to contentSkip to conversation

export block layer functions and add a bio helper

PATCH In review Mike Christie 1 participant 1 message Sep 16, 2005

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/5 export block layer functions and add a bio helper

SCSI wants to do async request so export blk_execute_rq_nowait and __blk_put_request.

And add bio_map_pages() which maps X bytes from a pages pointer array into a bio. This is useful for mapping a block of pages allocated from __get_free_pages/alloc_pages into a bio.

drivers/block/ll_rw_blk.c +5 -1
@@ -2302,6 +2302,8 @@ void blk_execute_rq_nowait(request_queue
 	generic_unplug_device(q);
 }
 
+EXPORT_SYMBOL_GPL(blk_execute_rq_nowait);
+
 /**
  * blk_execute_rq - insert a request into queue for execution
  * @q:		queue to insert the request in
@@ -2483,7 +2485,7 @@ void disk_round_stats(struct gendisk *di
 /*
  * queue lock must be held
  */
-static void __blk_put_request(request_queue_t *q, struct request *req)
+void __blk_put_request(request_queue_t *q, struct request *req)
 {
 	struct request_list *rl = req->rl;
 
@@ -2511,6 +2513,8 @@ static void __blk_put_request(request_qu
 	}
 }
 
+EXPORT_SYMBOL_GPL(__blk_put_request);
+
 void blk_put_request(struct request *req)
 {
 	/*
fs/bio.c +43 -0

49 lines not on this page · raw message

include/linux/bio.h +2 -0
@@ -302,6 +302,8 @@ extern struct bio *bio_map_user_iov(stru
 extern void bio_unmap_user(struct bio *);
 extern struct bio *bio_map_kern(struct request_queue *, void *, unsigned int,
 				unsigned int);
+extern struct bio *bio_map_pages(struct request_queue *, struct page *,
+				 unsigned int, unsigned int, unsigned int);
 extern void bio_set_pages_dirty(struct bio *bio);
 extern void bio_check_pages_dirty(struct bio *bio);
 extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int);
include/linux/blkdev.h +5 -0
@@ -548,6 +548,7 @@ extern void blk_unregister_queue(struct 
 extern void register_disk(struct gendisk *dev);
 extern void generic_make_request(struct bio *bio);
 extern void blk_put_request(struct request *);
+extern void __blk_put_request(request_queue_t *, struct request *);
 extern void blk_end_sync_rq(struct request *rq);
 extern void blk_attempt_remerge(request_queue_t *, struct request *);
 extern struct request *blk_get_request(request_queue_t *, int, int);
@@ -569,6 +570,10 @@ extern int blk_rq_map_kern(request_queue
 extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int);
 extern int blk_execute_rq(request_queue_t *, struct gendisk *,
 			  struct request *, int);
+extern void blk_execute_rq_nowait(request_queue_t *, struct gendisk *,
+				  struct request *, int,
+				  void (*done)(struct request *));
+
 static inline request_queue_t *bdev_get_queue(struct block_device *bdev)
 {
 	return bdev->bd_disk->queue;