Re: [PATCH 3/3] blk-wbt: throttle discards like background writes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 5/7/18 3:57 AM, Christoph Hellwig wrote:
>> -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?

It would be cleaner, but we don't have wbt_flag everywhere we need it.
Though I guess we could swap the masking in wbt_wait() and do it
before the __wbt_wait() call, and just use that. Since we only do
the indexing in that one spot, I don't think we should add a helper.

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

Sure, I can do that. I'll spin a v2.

-- 
Jens Axboe




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux