There may be for_each operations outstanding on an io_device when it is unregistered. Currently we just return when this happens, not unregistering the device but also not notifying the caller that this happened (since it returns void, and the callback function doesn't have a status parameter either). We could just push this responsibility to the caller, to never unregister an io_device if it knows it has outstanding for_each calls waiting to complete. But I think we can simplify this a lot by just handling this inside of the thread library. Mark that the device is pending registration, and unregister it (on the original requesting thread!) when the for_each count gets back to zero. Also don't allow any new for_each operations either. Note this requires a bit of refactoring on the thread unit tests, since it is now possible to unregister a device with outstanding for_each operations. Fixes issue #2631. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I978f2d99a25e65d2b7d71ce9b1926a79a6c94263 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13890 Community-CI: Mellanox Build Bot Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> |
||
---|---|---|
.. | ||
thread.c | ||
Makefile |