The defragmentation runs on every free and it only merges subsequent nodes. So there's no point of looping all nodes. So, just check if previous and next nodes are mergeable. This makes free performant and achieves the same exact functionality.