aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/blkdev.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r--include/linux/blkdev.h30
1 files changed, 17 insertions, 13 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 784a919aa0d0..1896e868854f 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -461,8 +461,7 @@ struct request_queue
461#define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */ 461#define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */
462#define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */ 462#define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */
463#define QUEUE_FLAG_IO_STAT 15 /* do IO stats */ 463#define QUEUE_FLAG_IO_STAT 15 /* do IO stats */
464#define QUEUE_FLAG_CQ 16 /* hardware does queuing */ 464#define QUEUE_FLAG_DISCARD 16 /* supports DISCARD */
465#define QUEUE_FLAG_DISCARD 17 /* supports DISCARD */
466 465
467#define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ 466#define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
468 (1 << QUEUE_FLAG_CLUSTER) | \ 467 (1 << QUEUE_FLAG_CLUSTER) | \
@@ -586,7 +585,6 @@ enum {
586 585
587#define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) 586#define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags)
588#define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) 587#define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags)
589#define blk_queue_queuing(q) test_bit(QUEUE_FLAG_CQ, &(q)->queue_flags)
590#define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) 588#define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags)
591#define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) 589#define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags)
592#define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags) 590#define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags)
@@ -845,7 +843,6 @@ static inline struct request_queue *bdev_get_queue(struct block_device *bdev)
845 * blk_rq_err_bytes() : bytes left till the next error boundary 843 * blk_rq_err_bytes() : bytes left till the next error boundary
846 * blk_rq_sectors() : sectors left in the entire request 844 * blk_rq_sectors() : sectors left in the entire request
847 * blk_rq_cur_sectors() : sectors left in the current segment 845 * blk_rq_cur_sectors() : sectors left in the current segment
848 * blk_rq_err_sectors() : sectors left till the next error boundary
849 */ 846 */
850static inline sector_t blk_rq_pos(const struct request *rq) 847static inline sector_t blk_rq_pos(const struct request *rq)
851{ 848{
@@ -874,11 +871,6 @@ static inline unsigned int blk_rq_cur_sectors(const struct request *rq)
874 return blk_rq_cur_bytes(rq) >> 9; 871 return blk_rq_cur_bytes(rq) >> 9;
875} 872}
876 873
877static inline unsigned int blk_rq_err_sectors(const struct request *rq)
878{
879 return blk_rq_err_bytes(rq) >> 9;
880}
881
882/* 874/*
883 * Request issue related functions. 875 * Request issue related functions.
884 */ 876 */
@@ -944,6 +936,8 @@ extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt);
944extern void blk_set_default_limits(struct queue_limits *lim); 936extern void blk_set_default_limits(struct queue_limits *lim);
945extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, 937extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
946 sector_t offset); 938 sector_t offset);
939extern int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev,
940 sector_t offset);
947extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, 941extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev,
948 sector_t offset); 942 sector_t offset);
949extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b); 943extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b);
@@ -1116,11 +1110,18 @@ static inline int queue_alignment_offset(struct request_queue *q)
1116 return q->limits.alignment_offset; 1110 return q->limits.alignment_offset;
1117} 1111}
1118 1112
1113static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t offset)
1114{
1115 unsigned int granularity = max(lim->physical_block_size, lim->io_min);
1116
1117 offset &= granularity - 1;
1118 return (granularity + lim->alignment_offset - offset) & (granularity - 1);
1119}
1120
1119static inline int queue_sector_alignment_offset(struct request_queue *q, 1121static inline int queue_sector_alignment_offset(struct request_queue *q,
1120 sector_t sector) 1122 sector_t sector)
1121{ 1123{
1122 return ((sector << 9) - q->limits.alignment_offset) 1124 return queue_limit_alignment_offset(&q->limits, sector << 9);
1123 & (q->limits.io_min - 1);
1124} 1125}
1125 1126
1126static inline int bdev_alignment_offset(struct block_device *bdev) 1127static inline int bdev_alignment_offset(struct block_device *bdev)
@@ -1147,8 +1148,11 @@ static inline int queue_discard_alignment(struct request_queue *q)
1147static inline int queue_sector_discard_alignment(struct request_queue *q, 1148static inline int queue_sector_discard_alignment(struct request_queue *q,
1148 sector_t sector) 1149 sector_t sector)
1149{ 1150{
1150 return ((sector << 9) - q->limits.discard_alignment) 1151 struct queue_limits *lim = &q->limits;
1151 & (q->limits.discard_granularity - 1); 1152 unsigned int alignment = (sector << 9) & (lim->discard_granularity - 1);
1153
1154 return (lim->discard_granularity + lim->discard_alignment - alignment)
1155 & (lim->discard_granularity - 1);
1152} 1156}
1153 1157
1154static inline unsigned int queue_discard_zeroes_data(struct request_queue *q) 1158static inline unsigned int queue_discard_zeroes_data(struct request_queue *q)