Commit 8054b89f authored by Jens Axboe's avatar Jens Axboe

blk-wbt: remove stat ops

Again a leftover from when the throttling code was generic. Now that we
just have the block user, get rid of the stat ops and indirections.
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent d8a0cbfd
...@@ -770,27 +770,6 @@ struct kobj_type blk_queue_ktype = { ...@@ -770,27 +770,6 @@ struct kobj_type blk_queue_ktype = {
.release = blk_release_queue, .release = blk_release_queue,
}; };
static void blk_wb_stat_get(void *data, struct blk_rq_stat *stat)
{
blk_queue_stat_get(data, stat);
}
static void blk_wb_stat_clear(void *data)
{
blk_stat_clear(data);
}
static bool blk_wb_stat_is_current(struct blk_rq_stat *stat)
{
return blk_stat_is_current(stat);
}
static struct wb_stat_ops wb_stat_ops = {
.get = blk_wb_stat_get,
.is_current = blk_wb_stat_is_current,
.clear = blk_wb_stat_clear,
};
static void blk_wb_init(struct request_queue *q) static void blk_wb_init(struct request_queue *q)
{ {
#ifndef CONFIG_BLK_WBT_MQ #ifndef CONFIG_BLK_WBT_MQ
...@@ -805,7 +784,7 @@ static void blk_wb_init(struct request_queue *q) ...@@ -805,7 +784,7 @@ static void blk_wb_init(struct request_queue *q)
/* /*
* If this fails, we don't get throttling * If this fails, we don't get throttling
*/ */
wbt_init(q, &wb_stat_ops); wbt_init(q);
} }
int blk_register_queue(struct gendisk *disk) int blk_register_queue(struct gendisk *disk)
......
...@@ -308,7 +308,7 @@ static int __latency_exceeded(struct rq_wb *rwb, struct blk_rq_stat *stat) ...@@ -308,7 +308,7 @@ static int __latency_exceeded(struct rq_wb *rwb, struct blk_rq_stat *stat)
* waited or still has writes in flights, consider us doing * waited or still has writes in flights, consider us doing
* just writes as well. * just writes as well.
*/ */
if ((stat[1].nr_samples && rwb->stat_ops->is_current(stat)) || if ((stat[1].nr_samples && blk_stat_is_current(stat)) ||
wb_recent_wait(rwb) || wbt_inflight(rwb)) wb_recent_wait(rwb) || wbt_inflight(rwb))
return LAT_UNKNOWN_WRITES; return LAT_UNKNOWN_WRITES;
return LAT_UNKNOWN; return LAT_UNKNOWN;
...@@ -333,7 +333,7 @@ static int latency_exceeded(struct rq_wb *rwb) ...@@ -333,7 +333,7 @@ static int latency_exceeded(struct rq_wb *rwb)
{ {
struct blk_rq_stat stat[2]; struct blk_rq_stat stat[2];
rwb->stat_ops->get(rwb->ops_data, stat); blk_queue_stat_get(rwb->queue, stat);
return __latency_exceeded(rwb, stat); return __latency_exceeded(rwb, stat);
} }
...@@ -355,7 +355,7 @@ static void scale_up(struct rq_wb *rwb) ...@@ -355,7 +355,7 @@ static void scale_up(struct rq_wb *rwb)
rwb->scale_step--; rwb->scale_step--;
rwb->unknown_cnt = 0; rwb->unknown_cnt = 0;
rwb->stat_ops->clear(rwb->ops_data); blk_stat_clear(rwb->queue);
rwb->scaled_max = calc_wb_limits(rwb); rwb->scaled_max = calc_wb_limits(rwb);
...@@ -385,7 +385,7 @@ static void scale_down(struct rq_wb *rwb, bool hard_throttle) ...@@ -385,7 +385,7 @@ static void scale_down(struct rq_wb *rwb, bool hard_throttle)
rwb->scaled_max = false; rwb->scaled_max = false;
rwb->unknown_cnt = 0; rwb->unknown_cnt = 0;
rwb->stat_ops->clear(rwb->ops_data); blk_stat_clear(rwb->queue);
calc_wb_limits(rwb); calc_wb_limits(rwb);
rwb_trace_step(rwb, "step down"); rwb_trace_step(rwb, "step down");
} }
...@@ -675,7 +675,7 @@ void wbt_disable(struct rq_wb *rwb) ...@@ -675,7 +675,7 @@ void wbt_disable(struct rq_wb *rwb)
} }
EXPORT_SYMBOL_GPL(wbt_disable); EXPORT_SYMBOL_GPL(wbt_disable);
int wbt_init(struct request_queue *q, struct wb_stat_ops *ops) int wbt_init(struct request_queue *q)
{ {
struct rq_wb *rwb; struct rq_wb *rwb;
int i; int i;
...@@ -688,9 +688,6 @@ int wbt_init(struct request_queue *q, struct wb_stat_ops *ops) ...@@ -688,9 +688,6 @@ int wbt_init(struct request_queue *q, struct wb_stat_ops *ops)
BUILD_BUG_ON(RWB_WINDOW_NSEC > BLK_STAT_NSEC); BUILD_BUG_ON(RWB_WINDOW_NSEC > BLK_STAT_NSEC);
BUILD_BUG_ON(WBT_NR_BITS > BLK_STAT_RES_BITS); BUILD_BUG_ON(WBT_NR_BITS > BLK_STAT_RES_BITS);
if (!ops->get || !ops->is_current || !ops->clear)
return -EINVAL;
rwb = kzalloc(sizeof(*rwb), GFP_KERNEL); rwb = kzalloc(sizeof(*rwb), GFP_KERNEL);
if (!rwb) if (!rwb)
return -ENOMEM; return -ENOMEM;
...@@ -706,8 +703,6 @@ int wbt_init(struct request_queue *q, struct wb_stat_ops *ops) ...@@ -706,8 +703,6 @@ int wbt_init(struct request_queue *q, struct wb_stat_ops *ops)
rwb->last_comp = rwb->last_issue = jiffies; rwb->last_comp = rwb->last_issue = jiffies;
rwb->queue = q; rwb->queue = q;
rwb->win_nsec = RWB_WINDOW_NSEC; rwb->win_nsec = RWB_WINDOW_NSEC;
rwb->stat_ops = ops;
rwb->ops_data = q;
wbt_update_limits(rwb); wbt_update_limits(rwb);
/* /*
......
...@@ -46,12 +46,6 @@ static inline bool wbt_is_read(struct blk_issue_stat *stat) ...@@ -46,12 +46,6 @@ static inline bool wbt_is_read(struct blk_issue_stat *stat)
return (stat->time >> BLK_STAT_SHIFT) & WBT_READ; return (stat->time >> BLK_STAT_SHIFT) & WBT_READ;
} }
struct wb_stat_ops {
void (*get)(void *, struct blk_rq_stat *);
bool (*is_current)(struct blk_rq_stat *);
void (*clear)(void *);
};
struct rq_wait { struct rq_wait {
wait_queue_head_t wait; wait_queue_head_t wait;
atomic_t inflight; atomic_t inflight;
...@@ -89,9 +83,6 @@ struct rq_wb { ...@@ -89,9 +83,6 @@ struct rq_wb {
unsigned long min_lat_nsec; unsigned long min_lat_nsec;
struct request_queue *queue; struct request_queue *queue;
struct rq_wait rq_wait[WBT_NUM_RWQ]; struct rq_wait rq_wait[WBT_NUM_RWQ];
struct wb_stat_ops *stat_ops;
void *ops_data;
}; };
static inline unsigned int wbt_inflight(struct rq_wb *rwb) static inline unsigned int wbt_inflight(struct rq_wb *rwb)
...@@ -109,7 +100,7 @@ static inline unsigned int wbt_inflight(struct rq_wb *rwb) ...@@ -109,7 +100,7 @@ static inline unsigned int wbt_inflight(struct rq_wb *rwb)
void __wbt_done(struct rq_wb *, enum wbt_flags); void __wbt_done(struct rq_wb *, enum wbt_flags);
void wbt_done(struct rq_wb *, struct blk_issue_stat *); void wbt_done(struct rq_wb *, struct blk_issue_stat *);
enum wbt_flags wbt_wait(struct rq_wb *, struct bio *, spinlock_t *); enum wbt_flags wbt_wait(struct rq_wb *, struct bio *, spinlock_t *);
int wbt_init(struct request_queue *, struct wb_stat_ops *); int wbt_init(struct request_queue *);
void wbt_exit(struct request_queue *); void wbt_exit(struct request_queue *);
void wbt_update_limits(struct rq_wb *); void wbt_update_limits(struct rq_wb *);
void wbt_requeue(struct rq_wb *, struct blk_issue_stat *); void wbt_requeue(struct rq_wb *, struct blk_issue_stat *);
...@@ -132,7 +123,7 @@ static inline enum wbt_flags wbt_wait(struct rq_wb *rwb, struct bio *bio, ...@@ -132,7 +123,7 @@ static inline enum wbt_flags wbt_wait(struct rq_wb *rwb, struct bio *bio,
{ {
return 0; return 0;
} }
static inline int wbt_init(struct request_queue *q, struct wb_stat_ops *ops) static inline int wbt_init(struct request_queue *q)
{ {
return -EINVAL; return -EINVAL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment