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.h84
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;
36struct sg_io_hdr; 36struct sg_io_hdr;
37struct bsg_job; 37struct bsg_job;
38struct blkcg_gq; 38struct blkcg_gq;
39struct 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
866static inline struct request_queue *bdev_get_queue(struct block_device *bdev) 860static 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
1067extern void blk_pm_runtime_init(struct request_queue *q, struct device *dev); 1061extern void blk_pm_runtime_init(struct request_queue *q, struct device *dev);
1068extern int blk_pre_runtime_suspend(struct request_queue *q); 1062extern int blk_pre_runtime_suspend(struct request_queue *q);
1069extern void blk_post_runtime_suspend(struct request_queue *q, int err); 1063extern 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))
1147extern int blk_queue_start_tag(struct request_queue *, struct request *); 1139extern int blk_queue_start_tag(struct request_queue *, struct request *);
1148extern struct request *blk_queue_find_tag(struct request_queue *, int); 1140extern struct request *blk_queue_find_tag(struct request_queue *, int);
1149extern void blk_queue_end_tag(struct request_queue *, struct request *); 1141extern 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);
1192enum blk_default_limits { 1184enum 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)
1285static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector) 1276static 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
1294static inline int bdev_alignment_offset(struct block_device *bdev) 1284static 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 */ 1457enum 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
1470struct blk_integrity_exchg { 1464struct 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
1479typedef void (integrity_gen_fn) (struct blk_integrity_exchg *); 1473typedef int (integrity_processing_fn) (struct blk_integrity_iter *);
1480typedef int (integrity_vrfy_fn) (struct blk_integrity_exchg *);
1481typedef void (integrity_set_tag_fn) (void *, void *, unsigned int);
1482typedef void (integrity_get_tag_fn) (void *, void *, unsigned int);
1483 1474
1484struct blk_integrity { 1475struct 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 *);
1504extern int blk_rq_map_integrity_sg(struct request_queue *, struct bio *, 1493extern int blk_rq_map_integrity_sg(struct request_queue *, struct bio *,
1505 struct scatterlist *); 1494 struct scatterlist *);
1506extern int blk_rq_count_integrity_sg(struct request_queue *, struct bio *); 1495extern int blk_rq_count_integrity_sg(struct request_queue *, struct bio *);
1507extern int blk_integrity_merge_rq(struct request_queue *, struct request *, 1496extern bool blk_integrity_merge_rq(struct request_queue *, struct request *,
1508 struct request *); 1497 struct request *);
1509extern int blk_integrity_merge_bio(struct request_queue *, struct request *, 1498extern bool blk_integrity_merge_bio(struct request_queue *, struct request *,
1510 struct bio *); 1499 struct bio *);
1511 1500
1512static inline 1501static inline
1513struct blk_integrity *bdev_get_integrity(struct block_device *bdev) 1502struct 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
1523static inline int blk_integrity_rq(struct request *rq) 1512static 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
1531static inline void blk_queue_max_integrity_segments(struct request_queue *q, 1517static 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}
1565static inline struct blk_integrity *bdev_get_integrity(struct block_device *b) 1551static inline struct blk_integrity *bdev_get_integrity(struct block_device *b)
1566{ 1552{
1567 return 0; 1553 return NULL;
1568} 1554}
1569static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk) 1555static 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}
1593static inline int blk_integrity_merge_rq(struct request_queue *rq, 1579static 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}
1599static inline int blk_integrity_merge_bio(struct request_queue *rq, 1585static 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}
1605static inline bool blk_integrity_is_initialized(struct gendisk *g) 1591static inline bool blk_integrity_is_initialized(struct gendisk *g)
1606{ 1592{