blk-mq: Record active_queues_shared_sbitmap per tag_set for when using shared sbitmap
[linux-2.6-microblaze.git] / include / linux / blk-mq.h
index 9d2d5ad..8279c80 100644 (file)
@@ -231,6 +231,9 @@ enum hctx_type {
  * @flags:        Zero or more BLK_MQ_F_* flags.
  * @driver_data:   Pointer to data owned by the block driver that created this
  *                tag set.
+ * @__bitmap_tags: A shared tags sbitmap, used over all hctx's
+ * @__breserved_tags:
+ *                A shared reserved tags sbitmap, used over all hctx's
  * @tags:         Tag sets. One tag set per hardware queue. Has @nr_hw_queues
  *                elements.
  * @tag_list_lock: Serializes tag_list accesses.
@@ -249,7 +252,10 @@ struct blk_mq_tag_set {
        unsigned int            timeout;
        unsigned int            flags;
        void                    *driver_data;
+       atomic_t                active_queues_shared_sbitmap;
 
+       struct sbitmap_queue    __bitmap_tags;
+       struct sbitmap_queue    __breserved_tags;
        struct blk_mq_tags      **tags;
 
        struct mutex            tag_list_lock;
@@ -378,12 +384,13 @@ struct blk_mq_ops {
 
 enum {
        BLK_MQ_F_SHOULD_MERGE   = 1 << 0,
-       BLK_MQ_F_TAG_SHARED     = 1 << 1,
+       BLK_MQ_F_TAG_QUEUE_SHARED = 1 << 1,
        /*
         * Set when this device requires underlying blk-mq device for
         * completing IO:
         */
        BLK_MQ_F_STACKING       = 1 << 2,
+       BLK_MQ_F_TAG_HCTX_SHARED = 1 << 3,
        BLK_MQ_F_BLOCKING       = 1 << 5,
        BLK_MQ_F_NO_SCHED       = 1 << 6,
        BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
@@ -489,8 +496,6 @@ void blk_mq_kick_requeue_list(struct request_queue *q);
 void blk_mq_delay_kick_requeue_list(struct request_queue *q, unsigned long msecs);
 void blk_mq_complete_request(struct request *rq);
 bool blk_mq_complete_request_remote(struct request *rq);
-bool blk_mq_bio_list_merge(struct request_queue *q, struct list_head *list,
-                          struct bio *bio, unsigned int nr_segs);
 bool blk_mq_queue_stopped(struct request_queue *q);
 void blk_mq_stop_hw_queue(struct blk_mq_hw_ctx *hctx);
 void blk_mq_start_hw_queue(struct blk_mq_hw_ctx *hctx);