diff options
Diffstat (limited to 'include/linux/blkdev.h')
| -rw-r--r-- | include/linux/blkdev.h | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 92f4b4b288dd..7f9a516f24de 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -272,7 +272,11 @@ struct blk_queue_tag { | |||
| 272 | int max_depth; /* what we will send to device */ | 272 | int max_depth; /* what we will send to device */ |
| 273 | int real_max_depth; /* what the array can hold */ | 273 | int real_max_depth; /* what the array can hold */ |
| 274 | atomic_t refcnt; /* map can be shared */ | 274 | atomic_t refcnt; /* map can be shared */ |
| 275 | int alloc_policy; /* tag allocation policy */ | ||
| 276 | int next_tag; /* next tag */ | ||
| 275 | }; | 277 | }; |
| 278 | #define BLK_TAG_ALLOC_FIFO 0 /* allocate starting from 0 */ | ||
| 279 | #define BLK_TAG_ALLOC_RR 1 /* allocate starting from last allocated tag */ | ||
| 276 | 280 | ||
| 277 | #define BLK_SCSI_MAX_CMDS (256) | 281 | #define BLK_SCSI_MAX_CMDS (256) |
| 278 | #define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8)) | 282 | #define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8)) |
| @@ -516,6 +520,7 @@ struct request_queue { | |||
| 516 | (1 << QUEUE_FLAG_ADD_RANDOM)) | 520 | (1 << QUEUE_FLAG_ADD_RANDOM)) |
| 517 | 521 | ||
| 518 | #define QUEUE_FLAG_MQ_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ | 522 | #define QUEUE_FLAG_MQ_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ |
| 523 | (1 << QUEUE_FLAG_STACKABLE) | \ | ||
| 519 | (1 << QUEUE_FLAG_SAME_COMP)) | 524 | (1 << QUEUE_FLAG_SAME_COMP)) |
| 520 | 525 | ||
| 521 | static inline void queue_lockdep_assert_held(struct request_queue *q) | 526 | static inline void queue_lockdep_assert_held(struct request_queue *q) |
| @@ -850,8 +855,8 @@ extern int blk_rq_map_user(struct request_queue *, struct request *, | |||
| 850 | extern int blk_rq_unmap_user(struct bio *); | 855 | extern int blk_rq_unmap_user(struct bio *); |
| 851 | extern int blk_rq_map_kern(struct request_queue *, struct request *, void *, unsigned int, gfp_t); | 856 | extern int blk_rq_map_kern(struct request_queue *, struct request *, void *, unsigned int, gfp_t); |
| 852 | extern int blk_rq_map_user_iov(struct request_queue *, struct request *, | 857 | extern int blk_rq_map_user_iov(struct request_queue *, struct request *, |
| 853 | struct rq_map_data *, const struct sg_iovec *, | 858 | struct rq_map_data *, const struct iov_iter *, |
| 854 | int, unsigned int, gfp_t); | 859 | gfp_t); |
| 855 | extern int blk_execute_rq(struct request_queue *, struct gendisk *, | 860 | extern int blk_execute_rq(struct request_queue *, struct gendisk *, |
| 856 | struct request *, int); | 861 | struct request *, int); |
| 857 | extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *, | 862 | extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *, |
| @@ -1044,8 +1049,6 @@ extern void blk_queue_flush_queueable(struct request_queue *q, bool queueable); | |||
| 1044 | extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); | 1049 | extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); |
| 1045 | 1050 | ||
| 1046 | extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *); | 1051 | extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *); |
| 1047 | extern int blk_bio_map_sg(struct request_queue *q, struct bio *bio, | ||
| 1048 | struct scatterlist *sglist); | ||
| 1049 | extern void blk_dump_rq_flags(struct request *, char *); | 1052 | extern void blk_dump_rq_flags(struct request *, char *); |
| 1050 | extern long nr_blockdev_pages(void); | 1053 | extern long nr_blockdev_pages(void); |
| 1051 | 1054 | ||
| @@ -1139,11 +1142,11 @@ static inline bool blk_needs_flush_plug(struct task_struct *tsk) | |||
| 1139 | extern int blk_queue_start_tag(struct request_queue *, struct request *); | 1142 | extern int blk_queue_start_tag(struct request_queue *, struct request *); |
| 1140 | extern struct request *blk_queue_find_tag(struct request_queue *, int); | 1143 | extern struct request *blk_queue_find_tag(struct request_queue *, int); |
| 1141 | extern void blk_queue_end_tag(struct request_queue *, struct request *); | 1144 | extern void blk_queue_end_tag(struct request_queue *, struct request *); |
| 1142 | extern int blk_queue_init_tags(struct request_queue *, int, struct blk_queue_tag *); | 1145 | extern int blk_queue_init_tags(struct request_queue *, int, struct blk_queue_tag *, int); |
| 1143 | extern void blk_queue_free_tags(struct request_queue *); | 1146 | extern void blk_queue_free_tags(struct request_queue *); |
| 1144 | extern int blk_queue_resize_tags(struct request_queue *, int); | 1147 | extern int blk_queue_resize_tags(struct request_queue *, int); |
| 1145 | extern void blk_queue_invalidate_tags(struct request_queue *); | 1148 | extern void blk_queue_invalidate_tags(struct request_queue *); |
| 1146 | extern struct blk_queue_tag *blk_init_tags(int); | 1149 | extern struct blk_queue_tag *blk_init_tags(int, int); |
| 1147 | extern void blk_free_tags(struct blk_queue_tag *); | 1150 | extern void blk_free_tags(struct blk_queue_tag *); |
| 1148 | 1151 | ||
| 1149 | static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | 1152 | static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, |
| @@ -1162,7 +1165,7 @@ extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector, | |||
| 1162 | extern int blkdev_issue_write_same(struct block_device *bdev, sector_t sector, | 1165 | extern int blkdev_issue_write_same(struct block_device *bdev, sector_t sector, |
| 1163 | sector_t nr_sects, gfp_t gfp_mask, struct page *page); | 1166 | sector_t nr_sects, gfp_t gfp_mask, struct page *page); |
| 1164 | extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector, | 1167 | extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector, |
| 1165 | sector_t nr_sects, gfp_t gfp_mask); | 1168 | sector_t nr_sects, gfp_t gfp_mask, bool discard); |
| 1166 | static inline int sb_issue_discard(struct super_block *sb, sector_t block, | 1169 | static inline int sb_issue_discard(struct super_block *sb, sector_t block, |
| 1167 | sector_t nr_blocks, gfp_t gfp_mask, unsigned long flags) | 1170 | sector_t nr_blocks, gfp_t gfp_mask, unsigned long flags) |
| 1168 | { | 1171 | { |
| @@ -1176,7 +1179,7 @@ static inline int sb_issue_zeroout(struct super_block *sb, sector_t block, | |||
| 1176 | return blkdev_issue_zeroout(sb->s_bdev, | 1179 | return blkdev_issue_zeroout(sb->s_bdev, |
| 1177 | block << (sb->s_blocksize_bits - 9), | 1180 | block << (sb->s_blocksize_bits - 9), |
| 1178 | nr_blocks << (sb->s_blocksize_bits - 9), | 1181 | nr_blocks << (sb->s_blocksize_bits - 9), |
| 1179 | gfp_mask); | 1182 | gfp_mask, true); |
| 1180 | } | 1183 | } |
| 1181 | 1184 | ||
| 1182 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); | 1185 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); |
| @@ -1601,8 +1604,8 @@ struct block_device_operations { | |||
| 1601 | int (*rw_page)(struct block_device *, sector_t, struct page *, int rw); | 1604 | int (*rw_page)(struct block_device *, sector_t, struct page *, int rw); |
| 1602 | int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); | 1605 | int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); |
| 1603 | int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); | 1606 | int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); |
| 1604 | int (*direct_access) (struct block_device *, sector_t, | 1607 | long (*direct_access)(struct block_device *, sector_t, |
| 1605 | void **, unsigned long *); | 1608 | void **, unsigned long *pfn, long size); |
| 1606 | unsigned int (*check_events) (struct gendisk *disk, | 1609 | unsigned int (*check_events) (struct gendisk *disk, |
| 1607 | unsigned int clearing); | 1610 | unsigned int clearing); |
| 1608 | /* ->media_changed() is DEPRECATED, use ->check_events() instead */ | 1611 | /* ->media_changed() is DEPRECATED, use ->check_events() instead */ |
| @@ -1620,6 +1623,8 @@ extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int, | |||
| 1620 | extern int bdev_read_page(struct block_device *, sector_t, struct page *); | 1623 | extern int bdev_read_page(struct block_device *, sector_t, struct page *); |
| 1621 | extern int bdev_write_page(struct block_device *, sector_t, struct page *, | 1624 | extern int bdev_write_page(struct block_device *, sector_t, struct page *, |
| 1622 | struct writeback_control *); | 1625 | struct writeback_control *); |
| 1626 | extern long bdev_direct_access(struct block_device *, sector_t, void **addr, | ||
| 1627 | unsigned long *pfn, long size); | ||
| 1623 | #else /* CONFIG_BLOCK */ | 1628 | #else /* CONFIG_BLOCK */ |
| 1624 | 1629 | ||
| 1625 | struct block_device; | 1630 | struct block_device; |
