On Wed, 2018-09-19 at 10:21 +0800, jianchao.wang wrote:
> On 09/19/2018 01:44 AM, Bart Van Assche wrote:
> > There is only one blk_pm_request_resume() call and that call is
> > inside blk_queue_enter() after the pm_only counter has been
> > checked.
> > 
> > For the legacy block layer, nr_pending is increased after the
> > blk_queue_enter() call from inside blk_old_get_request() succeeded.
> > 
> > So I don't see how blk_pm_request_resume() or q->nr_pending++ could
> > escape from the preempt checking?
> 
> For example:
> 
> 
> blk_pre_runtime_suspend                    generic_make_request
>                                              blk_queue_enter  //
> success here, no blk_pm_request_resume here
>                                              blk_mq_make_requset
> blk_set_pm_only
> 
> if (blk_requests_in_flight(q) == 0) {
>   synchronize_rcu();
>   if (blk_requests_in_flight(q) == 0)
>     ret = 0;
>   }
>                                              blk_mq_get_request

Hello Jianchao,

I think you are right. I will add a q_usage_counter check before
setting 'ret' to zero.

Bart.

Reply via email to