On 30/05/23 11:23, Peter Zijlstra wrote: > On Sat, May 27, 2023 at 12:18:04PM -0700, Linus Torvalds wrote: > > >> And it turns out that the above two trivial macros are actually quite >> useful in themselves. You want to do an auto-cleanup version of >> 'struct fd'? It's trivial: >> >> /* Trivial "getfd()" wrapper */ >> static inline void release_fd(struct fd *fd) >> { fdput(*fd); } >> >> #define auto_getfd(name, n) \ >> auto_release_name(struct fd, name, fdget(n), release_fd) >> > >> - I think the above is simpler and objectively better in every way >> from the explicitly scoped thing > > Well, I think having that as a option would still be very nice. > IMO the explicit scoping can help with readability. It gives a clear visual indication of where critical sections are, and you can break it up with a scope + guards as in migrate_swap_stop() to stay at sane indentation levels (with Python context managers, this would all be one scope). I'd argue that for these, the scope/indentation is beneficial and not just a byproduct. Even for longer functions like try_to_wake_up(), this works out alright. This obviously falls apart when dealing with too many guards (e.g. copy_process()) or if the resulting indentation is nuts, but I concur that keeping the explicit scope as an option would be nice.