> -static inline struct rq_wait *get_rq_wait(struct rq_wb *rwb, bool is_kswapd)
> +static inline struct rq_wait *get_rq_wait(struct rq_wb *rwb, bool is_trim,
> + bool is_kswapd)
> {
> - return &rwb->rq_wait[is_kswapd];
> + if (is_trim)
> + return &rwb->rq_wait[WBT_REQ_DISCARD];
> + else if (is_kswapd)
> + return &rwb->rq_wait[WBT_REQ_KSWAPD];
> + else
> + return &rwb->rq_wait[WBT_REQ_BG];
> }
Wouldn't it be more useful to pass a enum wbt_flag here?
Or just have a wbt_flag_to_wait_idx helper and do the array indexing
in the callers?
> {
> const int op = bio_op(bio);
>
> - /*
> - * If not a WRITE, do nothing
> - */
> - if (op != REQ_OP_WRITE)
> - return false;
> + if (op == REQ_OP_WRITE) {
> + /*
> + * Don't throttle WRITE_ODIRECT
> + */
> + if ((bio->bi_opf & (REQ_SYNC | REQ_IDLE)) ==
> + (REQ_SYNC | REQ_IDLE))
> + return false;
>
> - /*
> - * Don't throttle WRITE_ODIRECT
> - */
> - if ((bio->bi_opf & (REQ_SYNC | REQ_IDLE)) == (REQ_SYNC | REQ_IDLE))
> - return false;
> + return true;
> + } else if (op == REQ_OP_DISCARD)
> + return true;
what about:
switch (bio_op(bio)) {
case REQ_OP_WRITE:
/*
* Don't throttle WRITE_ODIRECT
*/
if ((bio->bi_opf & (REQ_SYNC | REQ_IDLE)) ==
(REQ_SYNC | REQ_IDLE))
return false;
/*FALLTHROUGH*/
case REQ_OP_DISCARD:
return true;
default:
return false;