A failure in make_dev*() can happen if the driver will just clean up gracefully on naming conflicts, which would leave the half-constructed (!SI_NAMED) device laying around and no path to release its unit number for reuse.
This patch does some minor refactoring to allow destroy_devl to be called in such a failure mode with the new KPI, clone_failed. SI_NAMED is still enforced for !failure cases, and an additional assert is added to make sure we didn't somehow end up with !SI_NAMED and children. Everything else in destroy_devl seems to be safe for the half-constructed device case.
A future patch will remove the unit number allocations from if_tuntap and force it to just rely on the clone framework for this.