diff options
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r-- | include/linux/blkdev.h | 71 |
1 files changed, 30 insertions, 41 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 87be398166d3..0207a78a8d82 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 */ |
@@ -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 | /* |
@@ -1285,10 +1279,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) | 1279 | static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector) |
1286 | { | 1280 | { |
1287 | unsigned int granularity = max(lim->physical_block_size, lim->io_min); | 1281 | unsigned int granularity = max(lim->physical_block_size, lim->io_min); |
1288 | unsigned int alignment = (sector << 9) & (granularity - 1); | 1282 | unsigned int alignment = sector_div(sector, granularity >> 9) << 9; |
1289 | 1283 | ||
1290 | return (granularity + lim->alignment_offset - alignment) | 1284 | return (granularity + lim->alignment_offset - alignment) % granularity; |
1291 | & (granularity - 1); | ||
1292 | } | 1285 | } |
1293 | 1286 | ||
1294 | static inline int bdev_alignment_offset(struct block_device *bdev) | 1287 | static inline int bdev_alignment_offset(struct block_device *bdev) |
@@ -1464,32 +1457,31 @@ static inline uint64_t rq_io_start_time_ns(struct request *req) | |||
1464 | 1457 | ||
1465 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | 1458 | #if defined(CONFIG_BLK_DEV_INTEGRITY) |
1466 | 1459 | ||
1467 | #define INTEGRITY_FLAG_READ 2 /* verify data integrity on read */ | 1460 | enum blk_integrity_flags { |
1468 | #define INTEGRITY_FLAG_WRITE 4 /* generate data integrity on write */ | 1461 | BLK_INTEGRITY_VERIFY = 1 << 0, |
1462 | BLK_INTEGRITY_GENERATE = 1 << 1, | ||
1463 | BLK_INTEGRITY_DEVICE_CAPABLE = 1 << 2, | ||
1464 | BLK_INTEGRITY_IP_CHECKSUM = 1 << 3, | ||
1465 | }; | ||
1469 | 1466 | ||
1470 | struct blk_integrity_exchg { | 1467 | struct blk_integrity_iter { |
1471 | void *prot_buf; | 1468 | void *prot_buf; |
1472 | void *data_buf; | 1469 | void *data_buf; |
1473 | sector_t sector; | 1470 | sector_t seed; |
1474 | unsigned int data_size; | 1471 | unsigned int data_size; |
1475 | unsigned short sector_size; | 1472 | unsigned short interval; |
1476 | const char *disk_name; | 1473 | const char *disk_name; |
1477 | }; | 1474 | }; |
1478 | 1475 | ||
1479 | typedef void (integrity_gen_fn) (struct blk_integrity_exchg *); | 1476 | 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 | 1477 | ||
1484 | struct blk_integrity { | 1478 | struct blk_integrity { |
1485 | integrity_gen_fn *generate_fn; | 1479 | integrity_processing_fn *generate_fn; |
1486 | integrity_vrfy_fn *verify_fn; | 1480 | integrity_processing_fn *verify_fn; |
1487 | integrity_set_tag_fn *set_tag_fn; | ||
1488 | integrity_get_tag_fn *get_tag_fn; | ||
1489 | 1481 | ||
1490 | unsigned short flags; | 1482 | unsigned short flags; |
1491 | unsigned short tuple_size; | 1483 | unsigned short tuple_size; |
1492 | unsigned short sector_size; | 1484 | unsigned short interval; |
1493 | unsigned short tag_size; | 1485 | unsigned short tag_size; |
1494 | 1486 | ||
1495 | const char *name; | 1487 | const char *name; |
@@ -1504,10 +1496,10 @@ extern int blk_integrity_compare(struct gendisk *, struct gendisk *); | |||
1504 | extern int blk_rq_map_integrity_sg(struct request_queue *, struct bio *, | 1496 | extern int blk_rq_map_integrity_sg(struct request_queue *, struct bio *, |
1505 | struct scatterlist *); | 1497 | struct scatterlist *); |
1506 | extern int blk_rq_count_integrity_sg(struct request_queue *, struct bio *); | 1498 | extern int blk_rq_count_integrity_sg(struct request_queue *, struct bio *); |
1507 | extern int blk_integrity_merge_rq(struct request_queue *, struct request *, | 1499 | extern bool blk_integrity_merge_rq(struct request_queue *, struct request *, |
1508 | struct request *); | 1500 | struct request *); |
1509 | extern int blk_integrity_merge_bio(struct request_queue *, struct request *, | 1501 | extern bool blk_integrity_merge_bio(struct request_queue *, struct request *, |
1510 | struct bio *); | 1502 | struct bio *); |
1511 | 1503 | ||
1512 | static inline | 1504 | static inline |
1513 | struct blk_integrity *bdev_get_integrity(struct block_device *bdev) | 1505 | struct blk_integrity *bdev_get_integrity(struct block_device *bdev) |
@@ -1520,12 +1512,9 @@ static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk) | |||
1520 | return disk->integrity; | 1512 | return disk->integrity; |
1521 | } | 1513 | } |
1522 | 1514 | ||
1523 | static inline int blk_integrity_rq(struct request *rq) | 1515 | static inline bool blk_integrity_rq(struct request *rq) |
1524 | { | 1516 | { |
1525 | if (rq->bio == NULL) | 1517 | return rq->cmd_flags & REQ_INTEGRITY; |
1526 | return 0; | ||
1527 | |||
1528 | return bio_integrity(rq->bio); | ||
1529 | } | 1518 | } |
1530 | 1519 | ||
1531 | static inline void blk_queue_max_integrity_segments(struct request_queue *q, | 1520 | static inline void blk_queue_max_integrity_segments(struct request_queue *q, |
@@ -1590,15 +1579,15 @@ static inline unsigned short queue_max_integrity_segments(struct request_queue * | |||
1590 | { | 1579 | { |
1591 | return 0; | 1580 | return 0; |
1592 | } | 1581 | } |
1593 | static inline int blk_integrity_merge_rq(struct request_queue *rq, | 1582 | static inline bool blk_integrity_merge_rq(struct request_queue *rq, |
1594 | struct request *r1, | 1583 | struct request *r1, |
1595 | struct request *r2) | 1584 | struct request *r2) |
1596 | { | 1585 | { |
1597 | return 0; | 1586 | return 0; |
1598 | } | 1587 | } |
1599 | static inline int blk_integrity_merge_bio(struct request_queue *rq, | 1588 | static inline bool blk_integrity_merge_bio(struct request_queue *rq, |
1600 | struct request *r, | 1589 | struct request *r, |
1601 | struct bio *b) | 1590 | struct bio *b) |
1602 | { | 1591 | { |
1603 | return 0; | 1592 | return 0; |
1604 | } | 1593 | } |