Skip to content
  • Warner Losh's avatar
    Make device_busy/unbusy work w/o Giant held · 1c7d15b0
    Warner Losh authored
    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
    1c7d15b0