} while (rqos);
 }
 
+void __rq_qos_queue_depth_changed(struct rq_qos *rqos)
+{
+       do {
+               if (rqos->ops->queue_depth_changed)
+                       rqos->ops->queue_depth_changed(rqos);
+               rqos = rqos->next;
+       } while (rqos);
+}
+
 /*
  * Return true, if we can't increase the depth further by scaling
  */
 
        void (*done)(struct rq_qos *, struct request *);
        void (*done_bio)(struct rq_qos *, struct bio *);
        void (*cleanup)(struct rq_qos *, struct bio *);
+       void (*queue_depth_changed)(struct rq_qos *);
        void (*exit)(struct rq_qos *);
        const struct blk_mq_debugfs_attr *debugfs_attrs;
 };
 void __rq_qos_track(struct rq_qos *rqos, struct request *rq, struct bio *bio);
 void __rq_qos_merge(struct rq_qos *rqos, struct request *rq, struct bio *bio);
 void __rq_qos_done_bio(struct rq_qos *rqos, struct bio *bio);
+void __rq_qos_queue_depth_changed(struct rq_qos *rqos);
 
 static inline void rq_qos_cleanup(struct request_queue *q, struct bio *bio)
 {
                __rq_qos_merge(q->rq_qos, rq, bio);
 }
 
+static inline void rq_qos_queue_depth_changed(struct request_queue *q)
+{
+       if (q->rq_qos)
+               __rq_qos_queue_depth_changed(q->rq_qos);
+}
+
 void rq_qos_exit(struct request_queue *);
 
 #endif
 
 void blk_set_queue_depth(struct request_queue *q, unsigned int depth)
 {
        q->queue_depth = depth;
-       wbt_set_queue_depth(q, depth);
+       rq_qos_queue_depth_changed(q);
 }
 EXPORT_SYMBOL(blk_set_queue_depth);
 
 
        }
 }
 
-void wbt_set_queue_depth(struct request_queue *q, unsigned int depth)
-{
-       struct rq_qos *rqos = wbt_rq_qos(q);
-       if (rqos) {
-               RQWB(rqos)->rq_depth.queue_depth = depth;
-               __wbt_update_limits(RQWB(rqos));
-       }
-}
-
 void wbt_set_write_cache(struct request_queue *q, bool write_cache_on)
 {
        struct rq_qos *rqos = wbt_rq_qos(q);
        return -1;
 }
 
+static void wbt_queue_depth_changed(struct rq_qos *rqos)
+{
+       RQWB(rqos)->rq_depth.queue_depth = blk_queue_depth(rqos->q);
+       __wbt_update_limits(RQWB(rqos));
+}
+
 static void wbt_exit(struct rq_qos *rqos)
 {
        struct rq_wb *rwb = RQWB(rqos);
        .requeue = wbt_requeue,
        .done = wbt_done,
        .cleanup = wbt_cleanup,
+       .queue_depth_changed = wbt_queue_depth_changed,
        .exit = wbt_exit,
 #ifdef CONFIG_BLK_DEBUG_FS
        .debugfs_attrs = wbt_debugfs_attrs,
 
        rwb->min_lat_nsec = wbt_default_latency_nsec(q);
 
-       wbt_set_queue_depth(q, blk_queue_depth(q));
+       wbt_queue_depth_changed(&rwb->rqos);
        wbt_set_write_cache(q, test_bit(QUEUE_FLAG_WC, &q->queue_flags));
 
        return 0;
 
 u64 wbt_get_min_lat(struct request_queue *q);
 void wbt_set_min_lat(struct request_queue *q, u64 val);
 
-void wbt_set_queue_depth(struct request_queue *, unsigned int);
 void wbt_set_write_cache(struct request_queue *, bool);
 
 u64 wbt_default_latency_nsec(struct request_queue *);
 static inline void wbt_enable_default(struct request_queue *q)
 {
 }
-static inline void wbt_set_queue_depth(struct request_queue *q, unsigned int depth)
-{
-}
 static inline void wbt_set_write_cache(struct request_queue *q, bool wc)
 {
 }