On Sun, Jun 22, 2025 at 06:54:07PM -0700, Boqun Feng wrote: > I think you also need to mention that `inner` only remains valid until > `inner.devm.complete_all()` unblocks `Devres::drop()`, because after > `Devres::drop()`'s `devm.wait_for_completion()` returns, `inner` may be > dropped or freed. I think of it the other way around: The invariant guarantees that `inner` is *always* valid. The the `drop_in_place(inner)` call has to justify that it upholds this invariant, by ensuring that at the time it is called no other code that accesses `inner` can ever run. Defining it the other way around would make the `inner()` accessor unsafe.