This article explains the behavior where it is impossible to delete the FortiGate object that has no references or its references were deleted. For example the IPSec phase1-interface or SLA performance object, with the following error:
"...FW(health-check) # delete SLA_01 The entry is used by other 1 entries Command fail. Return code -23..."
The only way to delete those objects is to reboot the Firewall, which is not always possible in the production environment.
Scope
FortiGate.
Solution
It is an internal issue and needs to be checked with TAC to get the fixed version. Its symptoms also include the repeated errors in the console terminal:
"...FW (health-check) # unregister_netdevice: waiting for .... to become free. Usage count = 105 unregister_netdevice: waiting for .... to become free. Usage count = 105 unregister_netdevice: waiting for .... to become free. Usage count = 105 unregister_netdevice: waiting for .... to become free. Usage count = 105 unregister_netdevice: waiting for .... to become free. Usage count = 105 ..."