On Thu, Jul 19, 2018 at 03:54:53PM +0000, Bart Van Assche wrote: > On Thu, 2018-07-19 at 06:45 +0800, Ming Lei wrote: > > So once blk_freeze_queue_start() returns, percpu_ref_is_zero() won't > > return true only until the rcu confirmation is done. That means this > > approach may not put device down. > > Hello Ming, > > I agree with your conclusion that it is not guaranteed that q->q_usage_counter > is in atomic mode when percpu_ref_is_zero() is called. However, I think that's > fine: if blk_pre_runtime_suspend() returns -EBUSY then the runtime core will > try again at a later time to perform runtime suspend. This behaviour should be persistent in next retry since percpu_ref_is_zero() should always return false after blk_freeze_queue_start() is run on one un-frozen queue. Thanks, Ming