Re: [PATCH] block: fix io hung by block throttle

2021-04-19 Thread Junxiao Bi
On 4/18/21 11:09 PM, Junxiao Bi wrote: - finish_wait(&rqw->wait, &data.wq); +    mutex_lock(&rqw->throttle_mutex); +    wait_event(rqw->wait, acquire_inflight_cb(rqw, private_data)); +    mutex_unlock(&rqw->throttle_mutex); This will break the throttle? There is a inflight io limitation. With

Re: [PATCH] block: fix io hung by block throttle

2021-04-18 Thread Junxiao Bi
On 4/18/21 5:33 AM, Hillf Danton wrote: On Sat, 17 Apr 2021 14:37:57 Junxiao Bi wrote: On 4/17/21 3:10 AM, Hillf Danton wrote: + if (acquire_inflight_cb(rqw, private_data)) This function is to increase atomic variable rq_wait->inflight. You are right. What's the mutex for? It cut

Re: [PATCH] block: fix io hung by block throttle

2021-04-17 Thread Junxiao Bi
On 4/17/21 3:10 AM, Hillf Danton wrote: --- a/block/blk-rq-qos.c +++ b/block/blk-rq-qos.c @@ -260,19 +260,17 @@ void rq_qos_wait(struct rq_wait *rqw, void *private_data, .cb = acquire_inflight_cb, .private_data = private_data, }; - bool has_sleeper;

Re: [PATCH] block: fix io hung by block throttle

2021-04-14 Thread Junxiao Bi
On 4/14/21 9:11 PM, Hillf Danton wrote: On Wed, 14 Apr 2021 14:18:30 Junxiao Bi wrote: There is a race bug which can cause io hung when multiple processes run parallel in rq_qos_wait(). Let assume there were 4 processes P1/P2/P3/P4, P1/P2 were at the entry of rq_qos_wait, and P3/P4 were waiting

[PATCH] block: fix io hung by block throttle

2021-04-14 Thread Junxiao Bi
There is a race bug which can cause io hung when multiple processes run parallel in rq_qos_wait(). Let assume there were 4 processes P1/P2/P3/P4, P1/P2 were at the entry of rq_qos_wait, and P3/P4 were waiting for io done, 2 io were inflight, the inflight io limit was 2. See race below. void rq_qos