diff options
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r-- | include/linux/blkdev.h | 73 |
1 files changed, 52 insertions, 21 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 13b75ca62181..91fa428fa2c1 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -196,7 +196,6 @@ typedef void (request_fn_proc) (struct request_queue *q); | |||
196 | typedef int (make_request_fn) (struct request_queue *q, struct bio *bio); | 196 | typedef int (make_request_fn) (struct request_queue *q, struct bio *bio); |
197 | typedef int (prep_rq_fn) (struct request_queue *, struct request *); | 197 | typedef int (prep_rq_fn) (struct request_queue *, struct request *); |
198 | typedef void (unprep_rq_fn) (struct request_queue *, struct request *); | 198 | typedef void (unprep_rq_fn) (struct request_queue *, struct request *); |
199 | typedef void (unplug_fn) (struct request_queue *); | ||
200 | 199 | ||
201 | struct bio_vec; | 200 | struct bio_vec; |
202 | struct bvec_merge_data { | 201 | struct bvec_merge_data { |
@@ -279,7 +278,6 @@ struct request_queue | |||
279 | make_request_fn *make_request_fn; | 278 | make_request_fn *make_request_fn; |
280 | prep_rq_fn *prep_rq_fn; | 279 | prep_rq_fn *prep_rq_fn; |
281 | unprep_rq_fn *unprep_rq_fn; | 280 | unprep_rq_fn *unprep_rq_fn; |
282 | unplug_fn *unplug_fn; | ||
283 | merge_bvec_fn *merge_bvec_fn; | 281 | merge_bvec_fn *merge_bvec_fn; |
284 | softirq_done_fn *softirq_done_fn; | 282 | softirq_done_fn *softirq_done_fn; |
285 | rq_timed_out_fn *rq_timed_out_fn; | 283 | rq_timed_out_fn *rq_timed_out_fn; |
@@ -293,12 +291,9 @@ struct request_queue | |||
293 | struct request *boundary_rq; | 291 | struct request *boundary_rq; |
294 | 292 | ||
295 | /* | 293 | /* |
296 | * Auto-unplugging state | 294 | * Delayed queue handling |
297 | */ | 295 | */ |
298 | struct timer_list unplug_timer; | 296 | struct delayed_work delay_work; |
299 | int unplug_thresh; /* After this many requests */ | ||
300 | unsigned long unplug_delay; /* After this many jiffies */ | ||
301 | struct work_struct unplug_work; | ||
302 | 297 | ||
303 | struct backing_dev_info backing_dev_info; | 298 | struct backing_dev_info backing_dev_info; |
304 | 299 | ||
@@ -394,14 +389,13 @@ struct request_queue | |||
394 | #define QUEUE_FLAG_ASYNCFULL 4 /* write queue has been filled */ | 389 | #define QUEUE_FLAG_ASYNCFULL 4 /* write queue has been filled */ |
395 | #define QUEUE_FLAG_DEAD 5 /* queue being torn down */ | 390 | #define QUEUE_FLAG_DEAD 5 /* queue being torn down */ |
396 | #define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */ | 391 | #define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */ |
397 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ | 392 | #define QUEUE_FLAG_ELVSWITCH 7 /* don't use elevator, just do FIFO */ |
398 | #define QUEUE_FLAG_ELVSWITCH 8 /* don't use elevator, just do FIFO */ | 393 | #define QUEUE_FLAG_BIDI 8 /* queue supports bidi requests */ |
399 | #define QUEUE_FLAG_BIDI 9 /* queue supports bidi requests */ | 394 | #define QUEUE_FLAG_NOMERGES 9 /* disable merge attempts */ |
400 | #define QUEUE_FLAG_NOMERGES 10 /* disable merge attempts */ | 395 | #define QUEUE_FLAG_SAME_COMP 10 /* force complete on same CPU */ |
401 | #define QUEUE_FLAG_SAME_COMP 11 /* force complete on same CPU */ | 396 | #define QUEUE_FLAG_FAIL_IO 11 /* fake timeout */ |
402 | #define QUEUE_FLAG_FAIL_IO 12 /* fake timeout */ | 397 | #define QUEUE_FLAG_STACKABLE 12 /* supports request stacking */ |
403 | #define QUEUE_FLAG_STACKABLE 13 /* supports request stacking */ | 398 | #define QUEUE_FLAG_NONROT 13 /* non-rotational device (SSD) */ |
404 | #define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */ | ||
405 | #define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */ | 399 | #define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */ |
406 | #define QUEUE_FLAG_IO_STAT 15 /* do IO stats */ | 400 | #define QUEUE_FLAG_IO_STAT 15 /* do IO stats */ |
407 | #define QUEUE_FLAG_DISCARD 16 /* supports DISCARD */ | 401 | #define QUEUE_FLAG_DISCARD 16 /* supports DISCARD */ |
@@ -479,7 +473,6 @@ static inline void queue_flag_clear(unsigned int flag, struct request_queue *q) | |||
479 | __clear_bit(flag, &q->queue_flags); | 473 | __clear_bit(flag, &q->queue_flags); |
480 | } | 474 | } |
481 | 475 | ||
482 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) | ||
483 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) | 476 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) |
484 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) | 477 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) |
485 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) | 478 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) |
@@ -674,9 +667,7 @@ extern int blk_rq_prep_clone(struct request *rq, struct request *rq_src, | |||
674 | extern void blk_rq_unprep_clone(struct request *rq); | 667 | extern void blk_rq_unprep_clone(struct request *rq); |
675 | extern int blk_insert_cloned_request(struct request_queue *q, | 668 | extern int blk_insert_cloned_request(struct request_queue *q, |
676 | struct request *rq); | 669 | struct request *rq); |
677 | extern void blk_plug_device(struct request_queue *); | 670 | extern void blk_delay_queue(struct request_queue *, unsigned long); |
678 | extern void blk_plug_device_unlocked(struct request_queue *); | ||
679 | extern int blk_remove_plug(struct request_queue *); | ||
680 | extern void blk_recount_segments(struct request_queue *, struct bio *); | 671 | extern void blk_recount_segments(struct request_queue *, struct bio *); |
681 | extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t, | 672 | extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t, |
682 | unsigned int, void __user *); | 673 | unsigned int, void __user *); |
@@ -720,7 +711,6 @@ extern int blk_execute_rq(struct request_queue *, struct gendisk *, | |||
720 | struct request *, int); | 711 | struct request *, int); |
721 | extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *, | 712 | extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *, |
722 | struct request *, int, rq_end_io_fn *); | 713 | struct request *, int, rq_end_io_fn *); |
723 | extern void blk_unplug(struct request_queue *q); | ||
724 | 714 | ||
725 | static inline struct request_queue *bdev_get_queue(struct block_device *bdev) | 715 | static inline struct request_queue *bdev_get_queue(struct block_device *bdev) |
726 | { | 716 | { |
@@ -857,7 +847,6 @@ extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bd | |||
857 | 847 | ||
858 | extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *); | 848 | extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *); |
859 | extern void blk_dump_rq_flags(struct request *, char *); | 849 | extern void blk_dump_rq_flags(struct request *, char *); |
860 | extern void generic_unplug_device(struct request_queue *); | ||
861 | extern long nr_blockdev_pages(void); | 850 | extern long nr_blockdev_pages(void); |
862 | 851 | ||
863 | int blk_get_queue(struct request_queue *); | 852 | int blk_get_queue(struct request_queue *); |
@@ -865,6 +854,31 @@ struct request_queue *blk_alloc_queue(gfp_t); | |||
865 | struct request_queue *blk_alloc_queue_node(gfp_t, int); | 854 | struct request_queue *blk_alloc_queue_node(gfp_t, int); |
866 | extern void blk_put_queue(struct request_queue *); | 855 | extern void blk_put_queue(struct request_queue *); |
867 | 856 | ||
857 | struct blk_plug { | ||
858 | unsigned long magic; | ||
859 | struct list_head list; | ||
860 | unsigned int should_sort; | ||
861 | }; | ||
862 | |||
863 | extern void blk_start_plug(struct blk_plug *); | ||
864 | extern void blk_finish_plug(struct blk_plug *); | ||
865 | extern void __blk_flush_plug(struct task_struct *, struct blk_plug *); | ||
866 | |||
867 | static inline void blk_flush_plug(struct task_struct *tsk) | ||
868 | { | ||
869 | struct blk_plug *plug = tsk->plug; | ||
870 | |||
871 | if (unlikely(plug)) | ||
872 | __blk_flush_plug(tsk, plug); | ||
873 | } | ||
874 | |||
875 | static inline bool blk_needs_flush_plug(struct task_struct *tsk) | ||
876 | { | ||
877 | struct blk_plug *plug = tsk->plug; | ||
878 | |||
879 | return plug && !list_empty(&plug->list); | ||
880 | } | ||
881 | |||
868 | /* | 882 | /* |
869 | * tag stuff | 883 | * tag stuff |
870 | */ | 884 | */ |
@@ -1283,6 +1297,23 @@ static inline long nr_blockdev_pages(void) | |||
1283 | return 0; | 1297 | return 0; |
1284 | } | 1298 | } |
1285 | 1299 | ||
1300 | static inline void blk_start_plug(struct list_head *list) | ||
1301 | { | ||
1302 | } | ||
1303 | |||
1304 | static inline void blk_finish_plug(struct list_head *list) | ||
1305 | { | ||
1306 | } | ||
1307 | |||
1308 | static inline void blk_flush_plug(struct task_struct *tsk) | ||
1309 | { | ||
1310 | } | ||
1311 | |||
1312 | static inline bool blk_needs_flush_plug(struct task_struct *tsk) | ||
1313 | { | ||
1314 | return false; | ||
1315 | } | ||
1316 | |||
1286 | #endif /* CONFIG_BLOCK */ | 1317 | #endif /* CONFIG_BLOCK */ |
1287 | 1318 | ||
1288 | #endif | 1319 | #endif |