Something really unusually stupid like returning from the function (assuming do_something() is a standin for arbitrary code, not specifically a function call)?
This is not even remotely the worst thing about mutexes though, so it wouldn't be why I would suggest avoiding them.
Honestly, to help avoid mistakes, I would keep it as a function call. Sure, it adds to the stack depth, but it also ensures a separate return doesn't cause the lock to be lost.
There's also the goto pattern, but anytime you separate a lock from an unlock by more than a screen's worth of text, they're forgotten.
And inline functions don't even add stack depth. It's still something that happens manually though. Every item that needs to be done manually and doesn't cause obvious failures when not done adds to development costs.
This is not even remotely the worst thing about mutexes though, so it wouldn't be why I would suggest avoiding them.