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. Bart.
