Don't spill more blocks than we need to

Also fixes a memory leak
Is your purpose to spill only the number of blocks which fit for the left `unfetchBytes` to stay in memory? Seems I misunderstood it.