• Warner Losh's avatar
    Make device_busy/unbusy work w/o Giant held · 08e78191
    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. Create a new device_busy_locked and device_unbusy_locked
    that are the current implemntations of device_busy and device_unbusy. Make
    device_busy and unbusy acquire Giant before calling the _locked versrions. Since
    we never sleep in the busy/unbusy path, Giant's single threaded semantics
    suffice to keep this safe.
    Sponsored by:		Netflix
    Reviewed by:		hselasky, jhb
    Differential Revision:	https://reviews.freebsd.org/D26284