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 {  	int max_depth;			/* what we will send to device */  	int real_max_depth;		/* what the array can hold */  	atomic_t refcnt;		/* map can be shared */ +	int alloc_policy;		/* tag allocation policy */ +	int next_tag;			/* next tag */  }; +#define BLK_TAG_ALLOC_FIFO 0 /* allocate starting from 0 */ +#define BLK_TAG_ALLOC_RR 1 /* allocate starting from last allocated tag */  #define BLK_SCSI_MAX_CMDS	(256)  #define BLK_SCSI_CMD_PER_LONG	(BLK_SCSI_MAX_CMDS / (sizeof(long) * 8)) @@ -516,6 +520,7 @@ struct request_queue {  				 (1 << QUEUE_FLAG_ADD_RANDOM))  #define QUEUE_FLAG_MQ_DEFAULT	((1 << QUEUE_FLAG_IO_STAT) |		\ +				 (1 << QUEUE_FLAG_STACKABLE)	|	\  				 (1 << QUEUE_FLAG_SAME_COMP))  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 *,  extern int blk_rq_unmap_user(struct bio *);  extern int blk_rq_map_kern(struct request_queue *, struct request *, void *, unsigned int, gfp_t);  extern int blk_rq_map_user_iov(struct request_queue *, struct request *, -			       struct rq_map_data *, const struct sg_iovec *, -			       int, unsigned int, gfp_t); +			       struct rq_map_data *, const struct iov_iter *, +			       gfp_t);  extern int blk_execute_rq(struct request_queue *, struct gendisk *,  			  struct request *, int);  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);  extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);  extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *); -extern int blk_bio_map_sg(struct request_queue *q, struct bio *bio, -			  struct scatterlist *sglist);  extern void blk_dump_rq_flags(struct request *, char *);  extern long nr_blockdev_pages(void); @@ -1139,11 +1142,11 @@ static inline bool blk_needs_flush_plug(struct task_struct *tsk)  extern int blk_queue_start_tag(struct request_queue *, struct request *);  extern struct request *blk_queue_find_tag(struct request_queue *, int);  extern void blk_queue_end_tag(struct request_queue *, struct request *); -extern int blk_queue_init_tags(struct request_queue *, int, struct blk_queue_tag *); +extern int blk_queue_init_tags(struct request_queue *, int, struct blk_queue_tag *, int);  extern void blk_queue_free_tags(struct request_queue *);  extern int blk_queue_resize_tags(struct request_queue *, int);  extern void blk_queue_invalidate_tags(struct request_queue *); -extern struct blk_queue_tag *blk_init_tags(int); +extern struct blk_queue_tag *blk_init_tags(int, int);  extern void blk_free_tags(struct blk_queue_tag *);  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,  extern int blkdev_issue_write_same(struct block_device *bdev, sector_t sector,  		sector_t nr_sects, gfp_t gfp_mask, struct page *page);  extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector, -			sector_t nr_sects, gfp_t gfp_mask); +		sector_t nr_sects, gfp_t gfp_mask, bool discard);  static inline int sb_issue_discard(struct super_block *sb, sector_t block,  		sector_t nr_blocks, gfp_t gfp_mask, unsigned long flags)  { @@ -1176,7 +1179,7 @@ static inline int sb_issue_zeroout(struct super_block *sb, sector_t block,  	return blkdev_issue_zeroout(sb->s_bdev,  				    block << (sb->s_blocksize_bits - 9),  				    nr_blocks << (sb->s_blocksize_bits - 9), -				    gfp_mask); +				    gfp_mask, true);  }  extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); @@ -1601,8 +1604,8 @@ struct block_device_operations {  	int (*rw_page)(struct block_device *, sector_t, struct page *, int rw);  	int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);  	int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); -	int (*direct_access) (struct block_device *, sector_t, -						void **, unsigned long *); +	long (*direct_access)(struct block_device *, sector_t, +					void **, unsigned long *pfn, long size);  	unsigned int (*check_events) (struct gendisk *disk,  				      unsigned int clearing);  	/* ->media_changed() is DEPRECATED, use ->check_events() instead */ @@ -1620,6 +1623,8 @@ extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int,  extern int bdev_read_page(struct block_device *, sector_t, struct page *);  extern int bdev_write_page(struct block_device *, sector_t, struct page *,  						struct writeback_control *); +extern long bdev_direct_access(struct block_device *, sector_t, void **addr, +						unsigned long *pfn, long size);  #else /* CONFIG_BLOCK */  struct block_device; |