Don't remove ADB entry from LRU before trying to expire it
There was a code flow error that would remove the expired ADB entry from the LRU list and then a check in the expire_entry() would cause assertion error because it expect the ADB entry to be linked.
Additionally, the expire mechanism would loop for cases when we would held only a read rwlock; in such case we need to upgrade the lock and try again, not just try again.
Closes #3875 (closed)