On 5/10/21 3:22 AM, yangerkun wrote: > 在 2021/4/11 8:46, Pavel Begunkov 写道: >> Revert of revert of "io_uring: wait potential ->release() on resurrect", >> which adds a helper for resurrect not racing completion reinit, as was >> removed because of a strange bug with no clear root or link to the >> patch. >> >> Was improved, instead of rcu_synchronize(), just wait_for_completion() >> because we're at 0 refs and it will happen very shortly. Specifically >> use non-interruptible version to ignore all pending signals that may >> have ended prior interruptible wait. >> >> This reverts commit cb5e1b81304e089ee3ca948db4d29f71902eb575. >> >> Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> > > I have a question. Compare with the logical before this patch. We need call reinit_completion(&ctx->ref_comp) to make sure the effective use of the ref_comp. > > Does we forget to do this? Or I miss something? If percpu_ref_tryget() there succeeds, it should have not called complete by design, otherwise it do complete once (+1 completion count) following with a single wait(-1 completion count), so +1 -1 should return it back to zero. See how struct completion works, e.g. completion.rst, number of completions is counted inside. btw, you have a strange mail encoding, apparently it's not Unicode -- Pavel Begunkov