This adds a free state to the busy lock. This is necessary for lockless page lookup. If we follow a stale pointer to a page we may find that it has been freed. We may also acquire a busy lock on a page and subsequently have it freed while we are holding it. Lockless lookup must handle both these cases and it is facilitated by this special free value.
This is also useful because buggy code could currently find a stale page and lock it without any error. This lock would then be released silently when the page was allocated. Subsequently both the allocator and the buggy thread could release the same lock.