diff options
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r-- | include/linux/blkdev.h | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index c5065e3d2ca9..c09696a90d6a 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -215,8 +215,9 @@ struct request { | |||
215 | /* | 215 | /* |
216 | * when request is used as a packet command carrier | 216 | * when request is used as a packet command carrier |
217 | */ | 217 | */ |
218 | unsigned int cmd_len; | 218 | unsigned short cmd_len; |
219 | unsigned char cmd[BLK_MAX_CDB]; | 219 | unsigned char __cmd[BLK_MAX_CDB]; |
220 | unsigned char *cmd; | ||
220 | 221 | ||
221 | unsigned int data_len; | 222 | unsigned int data_len; |
222 | unsigned int extra_len; /* length of alignment and padding */ | 223 | unsigned int extra_len; /* length of alignment and padding */ |
@@ -407,6 +408,31 @@ struct request_queue | |||
407 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ | 408 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ |
408 | #define QUEUE_FLAG_ELVSWITCH 8 /* don't use elevator, just do FIFO */ | 409 | #define QUEUE_FLAG_ELVSWITCH 8 /* don't use elevator, just do FIFO */ |
409 | #define QUEUE_FLAG_BIDI 9 /* queue supports bidi requests */ | 410 | #define QUEUE_FLAG_BIDI 9 /* queue supports bidi requests */ |
411 | #define QUEUE_FLAG_NOMERGES 10 /* disable merge attempts */ | ||
412 | |||
413 | static inline void queue_flag_set_unlocked(unsigned int flag, | ||
414 | struct request_queue *q) | ||
415 | { | ||
416 | __set_bit(flag, &q->queue_flags); | ||
417 | } | ||
418 | |||
419 | static inline void queue_flag_set(unsigned int flag, struct request_queue *q) | ||
420 | { | ||
421 | WARN_ON_ONCE(!spin_is_locked(q->queue_lock)); | ||
422 | __set_bit(flag, &q->queue_flags); | ||
423 | } | ||
424 | |||
425 | static inline void queue_flag_clear_unlocked(unsigned int flag, | ||
426 | struct request_queue *q) | ||
427 | { | ||
428 | __clear_bit(flag, &q->queue_flags); | ||
429 | } | ||
430 | |||
431 | static inline void queue_flag_clear(unsigned int flag, struct request_queue *q) | ||
432 | { | ||
433 | WARN_ON_ONCE(!spin_is_locked(q->queue_lock)); | ||
434 | __clear_bit(flag, &q->queue_flags); | ||
435 | } | ||
410 | 436 | ||
411 | enum { | 437 | enum { |
412 | /* | 438 | /* |
@@ -451,6 +477,7 @@ enum { | |||
451 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) | 477 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) |
452 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) | 478 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) |
453 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) | 479 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) |
480 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) | ||
454 | #define blk_queue_flushing(q) ((q)->ordseq) | 481 | #define blk_queue_flushing(q) ((q)->ordseq) |
455 | 482 | ||
456 | #define blk_fs_request(rq) ((rq)->cmd_type == REQ_TYPE_FS) | 483 | #define blk_fs_request(rq) ((rq)->cmd_type == REQ_TYPE_FS) |
@@ -496,17 +523,17 @@ static inline int blk_queue_full(struct request_queue *q, int rw) | |||
496 | static inline void blk_set_queue_full(struct request_queue *q, int rw) | 523 | static inline void blk_set_queue_full(struct request_queue *q, int rw) |
497 | { | 524 | { |
498 | if (rw == READ) | 525 | if (rw == READ) |
499 | set_bit(QUEUE_FLAG_READFULL, &q->queue_flags); | 526 | queue_flag_set(QUEUE_FLAG_READFULL, q); |
500 | else | 527 | else |
501 | set_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags); | 528 | queue_flag_set(QUEUE_FLAG_WRITEFULL, q); |
502 | } | 529 | } |
503 | 530 | ||
504 | static inline void blk_clear_queue_full(struct request_queue *q, int rw) | 531 | static inline void blk_clear_queue_full(struct request_queue *q, int rw) |
505 | { | 532 | { |
506 | if (rw == READ) | 533 | if (rw == READ) |
507 | clear_bit(QUEUE_FLAG_READFULL, &q->queue_flags); | 534 | queue_flag_clear(QUEUE_FLAG_READFULL, q); |
508 | else | 535 | else |
509 | clear_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags); | 536 | queue_flag_clear(QUEUE_FLAG_WRITEFULL, q); |
510 | } | 537 | } |
511 | 538 | ||
512 | 539 | ||
@@ -583,6 +610,7 @@ extern int blk_register_queue(struct gendisk *disk); | |||
583 | extern void blk_unregister_queue(struct gendisk *disk); | 610 | extern void blk_unregister_queue(struct gendisk *disk); |
584 | extern void register_disk(struct gendisk *dev); | 611 | extern void register_disk(struct gendisk *dev); |
585 | extern void generic_make_request(struct bio *bio); | 612 | extern void generic_make_request(struct bio *bio); |
613 | extern void blk_rq_init(struct request_queue *q, struct request *rq); | ||
586 | extern void blk_put_request(struct request *); | 614 | extern void blk_put_request(struct request *); |
587 | extern void __blk_put_request(struct request_queue *, struct request *); | 615 | extern void __blk_put_request(struct request_queue *, struct request *); |
588 | extern void blk_end_sync_rq(struct request *rq, int error); | 616 | extern void blk_end_sync_rq(struct request *rq, int error); |
@@ -626,6 +654,7 @@ extern void blk_start_queue(struct request_queue *q); | |||
626 | extern void blk_stop_queue(struct request_queue *q); | 654 | extern void blk_stop_queue(struct request_queue *q); |
627 | extern void blk_sync_queue(struct request_queue *q); | 655 | extern void blk_sync_queue(struct request_queue *q); |
628 | extern void __blk_stop_queue(struct request_queue *q); | 656 | extern void __blk_stop_queue(struct request_queue *q); |
657 | extern void __blk_run_queue(struct request_queue *); | ||
629 | extern void blk_run_queue(struct request_queue *); | 658 | extern void blk_run_queue(struct request_queue *); |
630 | extern void blk_start_queueing(struct request_queue *); | 659 | extern void blk_start_queueing(struct request_queue *); |
631 | extern int blk_rq_map_user(struct request_queue *, struct request *, void __user *, unsigned long); | 660 | extern int blk_rq_map_user(struct request_queue *, struct request *, void __user *, unsigned long); |