HomeFreeBSD

Make device_busy/unbusy work w/o Giant held

Description

Make device_busy/unbusy work w/o Giant held

The vast majority of the busy/unbusy users in the tree don't acquire
Giant before calling device_busy/unbusy. However, if multiple threads
are opening a file, say, that causes the device to busy/unbusy, then we
can race to the root marking things busy. Move to using a reference
count to keep track of how many times a device_t has been made busy. Use
that count to make the same decisions that we'd make with the old device
state.

Note: gpiopps.c uses D_TRACKCLOSE. Others do as well. However, there's a
known race with closes that will be corrected for all the drivers that
do this in a future commit.

Sponsored by: Netflix
Reviewed by: hselasky, jhb
Differential Revision: https://reviews.freebsd.org/D26284

Details

Provenance
impAuthored on Nov 30 2021, 10:03 PM
Reviewer
hselasky
Differential Revision
D26284: Make device_busy/unbusy work w/o Giant held
Parents
rG25c49c426c6b: Revert "Make device_busy/unbusy work w/o Giant held"
Branches
Unknown
Tags
Unknown