> -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;