diff options
Diffstat (limited to 'include/linux/blkdev.h')
| -rw-r--r-- | include/linux/blkdev.h | 84 |
1 files changed, 35 insertions, 49 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 518b46555b80..92f4b4b288dd 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -36,6 +36,7 @@ struct request; | |||
| 36 | struct sg_io_hdr; | 36 | struct sg_io_hdr; |
| 37 | struct bsg_job; | 37 | struct bsg_job; |
| 38 | struct blkcg_gq; | 38 | struct blkcg_gq; |
| 39 | struct blk_flush_queue; | ||
| 39 | 40 | ||
| 40 | #define BLKDEV_MIN_RQ 4 | 41 | #define BLKDEV_MIN_RQ 4 |
| 41 | #define BLKDEV_MAX_RQ 128 /* Default maximum */ | 42 | #define BLKDEV_MAX_RQ 128 /* Default maximum */ |
| @@ -397,7 +398,7 @@ struct request_queue { | |||
| 397 | */ | 398 | */ |
| 398 | struct kobject mq_kobj; | 399 | struct kobject mq_kobj; |
| 399 | 400 | ||
| 400 | #ifdef CONFIG_PM_RUNTIME | 401 | #ifdef CONFIG_PM |
| 401 | struct device *dev; | 402 | struct device *dev; |
| 402 | int rpm_status; | 403 | int rpm_status; |
| 403 | unsigned int nr_pending; | 404 | unsigned int nr_pending; |
| @@ -455,14 +456,7 @@ struct request_queue { | |||
| 455 | */ | 456 | */ |
| 456 | unsigned int flush_flags; | 457 | unsigned int flush_flags; |
| 457 | unsigned int flush_not_queueable:1; | 458 | unsigned int flush_not_queueable:1; |
| 458 | unsigned int flush_queue_delayed:1; | 459 | struct blk_flush_queue *fq; |
| 459 | unsigned int flush_pending_idx:1; | ||
| 460 | unsigned int flush_running_idx:1; | ||
| 461 | unsigned long flush_pending_since; | ||
| 462 | struct list_head flush_queue[2]; | ||
| 463 | struct list_head flush_data_in_flight; | ||
| 464 | struct request *flush_rq; | ||
| 465 | spinlock_t mq_flush_lock; | ||
| 466 | 460 | ||
| 467 | struct list_head requeue_list; | 461 | struct list_head requeue_list; |
| 468 | spinlock_t requeue_lock; | 462 | spinlock_t requeue_lock; |
| @@ -865,7 +859,7 @@ extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *, | |||
| 865 | 859 | ||
| 866 | static inline struct request_queue *bdev_get_queue(struct block_device *bdev) | 860 | static inline struct request_queue *bdev_get_queue(struct block_device *bdev) |
| 867 | { | 861 | { |
| 868 | return bdev->bd_disk->queue; | 862 | return bdev->bd_disk->queue; /* this is never NULL */ |
| 869 | } | 863 | } |
| 870 | 864 | ||
| 871 | /* | 865 | /* |
| @@ -1063,7 +1057,7 @@ extern void blk_put_queue(struct request_queue *); | |||
| 1063 | /* | 1057 | /* |
| 1064 | * block layer runtime pm functions | 1058 | * block layer runtime pm functions |
| 1065 | */ | 1059 | */ |
| 1066 | #ifdef CONFIG_PM_RUNTIME | 1060 | #ifdef CONFIG_PM |
| 1067 | extern void blk_pm_runtime_init(struct request_queue *q, struct device *dev); | 1061 | extern void blk_pm_runtime_init(struct request_queue *q, struct device *dev); |
| 1068 | extern int blk_pre_runtime_suspend(struct request_queue *q); | 1062 | extern int blk_pre_runtime_suspend(struct request_queue *q); |
| 1069 | extern void blk_post_runtime_suspend(struct request_queue *q, int err); | 1063 | extern void blk_post_runtime_suspend(struct request_queue *q, int err); |
| @@ -1142,8 +1136,6 @@ static inline bool blk_needs_flush_plug(struct task_struct *tsk) | |||
| 1142 | /* | 1136 | /* |
| 1143 | * tag stuff | 1137 | * tag stuff |
| 1144 | */ | 1138 | */ |
| 1145 | #define blk_rq_tagged(rq) \ | ||
| 1146 | ((rq)->mq_ctx || ((rq)->cmd_flags & REQ_QUEUED)) | ||
| 1147 | extern int blk_queue_start_tag(struct request_queue *, struct request *); | 1139 | extern int blk_queue_start_tag(struct request_queue *, struct request *); |
| 1148 | extern struct request *blk_queue_find_tag(struct request_queue *, int); | 1140 | extern struct request *blk_queue_find_tag(struct request_queue *, int); |
| 1149 | extern void blk_queue_end_tag(struct request_queue *, struct request *); | 1141 | extern void blk_queue_end_tag(struct request_queue *, struct request *); |
| @@ -1192,7 +1184,6 @@ extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); | |||
| 1192 | enum blk_default_limits { | 1184 | enum blk_default_limits { |
| 1193 | BLK_MAX_SEGMENTS = 128, | 1185 | BLK_MAX_SEGMENTS = 128, |
| 1194 | BLK_SAFE_MAX_SECTORS = 255, | 1186 | BLK_SAFE_MAX_SECTORS = 255, |
| 1195 | BLK_DEF_MAX_SECTORS = 1024, | ||
| 1196 | BLK_MAX_SEGMENT_SIZE = 65536, | 1187 | BLK_MAX_SEGMENT_SIZE = 65536, |
| 1197 | BLK_SEG_BOUNDARY_MASK = 0xFFFFFFFFUL, | 1188 | BLK_SEG_BOUNDARY_MASK = 0xFFFFFFFFUL, |
| 1198 | }; | 1189 | }; |
| @@ -1285,10 +1276,9 @@ static inline int queue_alignment_offset(struct request_queue *q) | |||
| 1285 | static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector) | 1276 | static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector) |
| 1286 | { | 1277 | { |
| 1287 | unsigned int granularity = max(lim->physical_block_size, lim->io_min); | 1278 | unsigned int granularity = max(lim->physical_block_size, lim->io_min); |
| 1288 | unsigned int alignment = (sector << 9) & (granularity - 1); | 1279 | unsigned int alignment = sector_div(sector, granularity >> 9) << 9; |
| 1289 | 1280 | ||
| 1290 | return (granularity + lim->alignment_offset - alignment) | 1281 | return (granularity + lim->alignment_offset - alignment) % granularity; |
| 1291 | & (granularity - 1); | ||
| 1292 | } | 1282 | } |
| 1293 | 1283 | ||
| 1294 | static inline int bdev_alignment_offset(struct block_device *bdev) | 1284 | static inline int bdev_alignment_offset(struct block_device *bdev) |
| @@ -1464,32 +1454,31 @@ static inline uint64_t rq_io_start_time_ns(struct request *req) | |||
| 1464 | 1454 | ||
| 1465 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | 1455 | #if defined(CONFIG_BLK_DEV_INTEGRITY) |
| 1466 | 1456 | ||
| 1467 | #define INTEGRITY_FLAG_READ 2 /* verify data integrity on read */ | 1457 | enum blk_integrity_flags { |
| 1468 | #define INTEGRITY_FLAG_WRITE 4 /* generate data integrity on write */ | 1458 | BLK_INTEGRITY_VERIFY = 1 << 0, |
| 1459 | BLK_INTEGRITY_GENERATE = 1 << 1, | ||
| 1460 | BLK_INTEGRITY_DEVICE_CAPABLE = 1 << 2, | ||
| 1461 | BLK_INTEGRITY_IP_CHECKSUM = 1 << 3, | ||
| 1462 | }; | ||
| 1469 | 1463 | ||
| 1470 | struct blk_integrity_exchg { | 1464 | struct blk_integrity_iter { |
| 1471 | void *prot_buf; | 1465 | void *prot_buf; |
| 1472 | void *data_buf; | 1466 | void *data_buf; |
| 1473 | sector_t sector; | 1467 | sector_t seed; |
| 1474 | unsigned int data_size; | 1468 | unsigned int data_size; |
| 1475 | unsigned short sector_size; | 1469 | unsigned short interval; |
| 1476 | const char *disk_name; | 1470 | const char *disk_name; |
| 1477 | }; | 1471 | }; |
| 1478 | 1472 | ||
| 1479 | typedef void (integrity_gen_fn) (struct blk_integrity_exchg *); | 1473 | typedef int (integrity_processing_fn) (struct blk_integrity_iter *); |
| 1480 | typedef int (integrity_vrfy_fn) (struct blk_integrity_exchg *); | ||
| 1481 | typedef void (integrity_set_tag_fn) (void *, void *, unsigned int); | ||
| 1482 | typedef void (integrity_get_tag_fn) (void *, void *, unsigned int); | ||
| 1483 | 1474 | ||
| 1484 | struct blk_integrity { | 1475 | struct blk_integrity { |
| 1485 | integrity_gen_fn *generate_fn; | 1476 | integrity_processing_fn *generate_fn; |
| 1486 | integrity_vrfy_fn *verify_fn; | 1477 | integrity_processing_fn *verify_fn; |
| 1487 | integrity_set_tag_fn *set_tag_fn; | ||
| 1488 | integrity_get_tag_fn *get_tag_fn; | ||
| 1489 | 1478 | ||
| 1490 | unsigned short flags; | 1479 | unsigned short flags; |
| 1491 | unsigned short tuple_size; | 1480 | unsigned short tuple_size; |
| 1492 | unsigned short sector_size; | 1481 | unsigned short interval; |
| 1493 | unsigned short tag_size; | 1482 | unsigned short tag_size; |
| 1494 | 1483 | ||
| 1495 | const char *name; | 1484 | const char *name; |
| @@ -1504,10 +1493,10 @@ extern int blk_integrity_compare(struct gendisk *, struct gendisk *); | |||
| 1504 | extern int blk_rq_map_integrity_sg(struct request_queue *, struct bio *, | 1493 | extern int blk_rq_map_integrity_sg(struct request_queue *, struct bio *, |
| 1505 | struct scatterlist *); | 1494 | struct scatterlist *); |
| 1506 | extern int blk_rq_count_integrity_sg(struct request_queue *, struct bio *); | 1495 | extern int blk_rq_count_integrity_sg(struct request_queue *, struct bio *); |
| 1507 | extern int blk_integrity_merge_rq(struct request_queue *, struct request *, | 1496 | extern bool blk_integrity_merge_rq(struct request_queue *, struct request *, |
| 1508 | struct request *); | 1497 | struct request *); |
| 1509 | extern int blk_integrity_merge_bio(struct request_queue *, struct request *, | 1498 | extern bool blk_integrity_merge_bio(struct request_queue *, struct request *, |
| 1510 | struct bio *); | 1499 | struct bio *); |
| 1511 | 1500 | ||
| 1512 | static inline | 1501 | static inline |
| 1513 | struct blk_integrity *bdev_get_integrity(struct block_device *bdev) | 1502 | struct blk_integrity *bdev_get_integrity(struct block_device *bdev) |
| @@ -1520,12 +1509,9 @@ static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk) | |||
| 1520 | return disk->integrity; | 1509 | return disk->integrity; |
| 1521 | } | 1510 | } |
| 1522 | 1511 | ||
| 1523 | static inline int blk_integrity_rq(struct request *rq) | 1512 | static inline bool blk_integrity_rq(struct request *rq) |
| 1524 | { | 1513 | { |
| 1525 | if (rq->bio == NULL) | 1514 | return rq->cmd_flags & REQ_INTEGRITY; |
| 1526 | return 0; | ||
| 1527 | |||
| 1528 | return bio_integrity(rq->bio); | ||
| 1529 | } | 1515 | } |
| 1530 | 1516 | ||
| 1531 | static inline void blk_queue_max_integrity_segments(struct request_queue *q, | 1517 | static inline void blk_queue_max_integrity_segments(struct request_queue *q, |
| @@ -1564,7 +1550,7 @@ static inline int blk_rq_map_integrity_sg(struct request_queue *q, | |||
| 1564 | } | 1550 | } |
| 1565 | static inline struct blk_integrity *bdev_get_integrity(struct block_device *b) | 1551 | static inline struct blk_integrity *bdev_get_integrity(struct block_device *b) |
| 1566 | { | 1552 | { |
| 1567 | return 0; | 1553 | return NULL; |
| 1568 | } | 1554 | } |
| 1569 | static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk) | 1555 | static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk) |
| 1570 | { | 1556 | { |
| @@ -1590,17 +1576,17 @@ static inline unsigned short queue_max_integrity_segments(struct request_queue * | |||
| 1590 | { | 1576 | { |
| 1591 | return 0; | 1577 | return 0; |
| 1592 | } | 1578 | } |
| 1593 | static inline int blk_integrity_merge_rq(struct request_queue *rq, | 1579 | static inline bool blk_integrity_merge_rq(struct request_queue *rq, |
| 1594 | struct request *r1, | 1580 | struct request *r1, |
| 1595 | struct request *r2) | 1581 | struct request *r2) |
| 1596 | { | 1582 | { |
| 1597 | return 0; | 1583 | return true; |
| 1598 | } | 1584 | } |
| 1599 | static inline int blk_integrity_merge_bio(struct request_queue *rq, | 1585 | static inline bool blk_integrity_merge_bio(struct request_queue *rq, |
| 1600 | struct request *r, | 1586 | struct request *r, |
| 1601 | struct bio *b) | 1587 | struct bio *b) |
| 1602 | { | 1588 | { |
| 1603 | return 0; | 1589 | return true; |
| 1604 | } | 1590 | } |
| 1605 | static inline bool blk_integrity_is_initialized(struct gendisk *g) | 1591 | static inline bool blk_integrity_is_initialized(struct gendisk *g) |
| 1606 | { | 1592 | { |
