HomeFreeBSD

_utmx_op: don't recurse on chain busy

Description

_utmx_op: don't recurse on chain busy

In handling a PP mutex, we'll busy it as soon as we enter the loop and
unbusy it either prior to sleeping or at exit time. In this particular
case, if we fail to transition the mutex from OWNERDEAD -> owned because
of casueword(9) failure and the suspend check fails, we'll start over
and attempt to busy an already-busied chain and irrecoverably lock up
both this thread and anything else that tries to busy the chain.

Unbusy the chain prior to restarting because I couldn't decide if that
was a better or worse idea than just keeping track of whether we dirtied
it in do_lock_pp() and avoiding re-dirty. This is marginally easier to
reason about as it returns us to expected state on entry to the loop.

While we're here, simplify the code a bit as error will be clobbered
right after the branch anyways.

Reviewed by: kib, olce (both earlier version)
Differential Revision: https://reviews.freebsd.org/D47493

Details

Provenance
kevansAuthored on Wed, Nov 13, 10:18 PM
Reviewer
kib
Differential Revision
D47493: _utmx_op: don't recurse on chain busy
Parents
rG0f30aed1056a: localedata: update widths.txt after recent Hangul exceptions
Branches
Unknown
Tags
Unknown