diff options
author | Tejun Heo <htejun@gmail.com> | 2008-02-19 05:36:53 -0500 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2008-02-19 05:36:53 -0500 |
commit | 2fb98e8414c42cb14698833aac640b143b9ade4f (patch) | |
tree | ab241305b5ce3ea5ef3e76df7abe04b831cd9e34 /include/linux | |
parent | 6b00769fe1502b4ad97bb327ef7ac971b208bfb5 (diff) |
block: implement request_queue->dma_drain_needed
Draining shouldn't be done for commands where overflow may indicate
data integrity issues. Add dma_drain_needed callback to
request_queue. Drain buffer is appened iff this function returns
non-zero.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/blkdev.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index f1fe9fbf1c0e..6fe67d1939c2 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -259,6 +259,7 @@ struct bio_vec; | |||
259 | typedef int (merge_bvec_fn) (struct request_queue *, struct bio *, struct bio_vec *); | 259 | typedef int (merge_bvec_fn) (struct request_queue *, struct bio *, struct bio_vec *); |
260 | typedef void (prepare_flush_fn) (struct request_queue *, struct request *); | 260 | typedef void (prepare_flush_fn) (struct request_queue *, struct request *); |
261 | typedef void (softirq_done_fn)(struct request *); | 261 | typedef void (softirq_done_fn)(struct request *); |
262 | typedef int (dma_drain_needed_fn)(struct request *); | ||
262 | 263 | ||
263 | enum blk_queue_state { | 264 | enum blk_queue_state { |
264 | Queue_down, | 265 | Queue_down, |
@@ -295,6 +296,7 @@ struct request_queue | |||
295 | merge_bvec_fn *merge_bvec_fn; | 296 | merge_bvec_fn *merge_bvec_fn; |
296 | prepare_flush_fn *prepare_flush_fn; | 297 | prepare_flush_fn *prepare_flush_fn; |
297 | softirq_done_fn *softirq_done_fn; | 298 | softirq_done_fn *softirq_done_fn; |
299 | dma_drain_needed_fn *dma_drain_needed; | ||
298 | 300 | ||
299 | /* | 301 | /* |
300 | * Dispatch queue sorting | 302 | * Dispatch queue sorting |
@@ -699,8 +701,9 @@ extern void blk_queue_max_hw_segments(struct request_queue *, unsigned short); | |||
699 | extern void blk_queue_max_segment_size(struct request_queue *, unsigned int); | 701 | extern void blk_queue_max_segment_size(struct request_queue *, unsigned int); |
700 | extern void blk_queue_hardsect_size(struct request_queue *, unsigned short); | 702 | extern void blk_queue_hardsect_size(struct request_queue *, unsigned short); |
701 | extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b); | 703 | extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b); |
702 | extern int blk_queue_dma_drain(struct request_queue *q, void *buf, | 704 | extern int blk_queue_dma_drain(struct request_queue *q, |
703 | unsigned int size); | 705 | dma_drain_needed_fn *dma_drain_needed, |
706 | void *buf, unsigned int size); | ||
704 | extern void blk_queue_segment_boundary(struct request_queue *, unsigned long); | 707 | extern void blk_queue_segment_boundary(struct request_queue *, unsigned long); |
705 | extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn); | 708 | extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn); |
706 | extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *); | 709 | extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *); |