diff options
| author | Jens Axboe <axboe@suse.de> | 2002-09-29 22:33:53 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-09-29 22:33:53 -0700 |
| commit | b4b973889030e4bf30c3f67308bcc0af3cc9348e (patch) | |
| tree | 92f10c4de92e5e598c115a4944a04dc7629fe589 | |
| parent | 88a745f564b92ea5d1baa669c265066636ac6c44 (diff) | |
[PATCH] add function to set q->merge_bvec_fn
Add a function to set queue merge_bvec_fn to mimic the rest of the api,
and also add documentation for that and blk_queue_prep_rq().
| -rw-r--r-- | drivers/block/ll_rw_blk.c | 31 | ||||
| -rw-r--r-- | include/linux/blkdev.h | 1 |
2 files changed, 32 insertions, 0 deletions
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index 13f769d27a5d..985a1dd6f869 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c @@ -151,12 +151,42 @@ struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev) return ret; } +/** + * blk_queue_prep_rq - set a prepare_request function for queue + * @q: queue + * @pfn: prepare_request function + * + * It's possible for a queue to register a prepare_request callback which + * is invoked before the request is handed to the request_fn. The goal of + * the function is to prepare a request for I/O, it can be used to build a + * cdb from the request data for instance. + * + */ void blk_queue_prep_rq(request_queue_t *q, prep_rq_fn *pfn) { q->prep_rq_fn = pfn; } /** + * blk_queue_merge_bvec - set a merge_bvec function for queue + * @q: queue + * @mbfn: merge_bvec_fn + * + * Usually queues have static limitations on the max sectors or segments that + * we can put in a request. Stacking drivers may have some settings that + * are dynamic, and thus we have to query the queue whether it is ok to + * add a new bio_vec to a bio at a given offset or not. If the block device + * has such limitations, it needs to register a merge_bvec_fn to control + * the size of bio's sent to it. Per default now merge_bvec_fn is defined for + * a queue, and only the fixed limits are honored. + * + */ +void blk_queue_merge_bvec(request_queue_t *q, merge_bvec_fn *mbfn) +{ + q->merge_bvec_fn = mbfn; +} + +/** * blk_queue_make_request - define an alternate make_request function for a device * @q: the request queue for the device to be affected * @mfn: the alternate make_request function @@ -2057,6 +2087,7 @@ EXPORT_SYMBOL(blk_put_request); EXPORT_SYMBOL(blk_insert_request); EXPORT_SYMBOL(blk_queue_prep_rq); +EXPORT_SYMBOL(blk_queue_merge_bvec); EXPORT_SYMBOL(blk_queue_find_tag); EXPORT_SYMBOL(blk_queue_init_tags); diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 255001f6f433..b64f24427f6a 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -326,6 +326,7 @@ extern void blk_queue_hardsect_size(request_queue_t *, unsigned short); extern void blk_queue_segment_boundary(request_queue_t *, unsigned long); extern void blk_queue_assign_lock(request_queue_t *, spinlock_t *); extern void blk_queue_prep_rq(request_queue_t *, prep_rq_fn *pfn); +extern void blk_queue_merge_bvec(request_queue_t *, merge_bvec_fn *); extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); extern int blk_rq_map_sg(request_queue_t *, struct request *, struct scatterlist *); |
