return -EBUSY;
                }
 
-               if (i915_gem_valid_gtt_space(vma, cache_level))
+               if (!i915_vma_is_closed(vma) &&
+                   i915_gem_valid_gtt_space(vma, cache_level))
                        continue;
 
                ret = i915_vma_unbind(vma);
 
        u64 start, end;
        int ret;
 
+       GEM_BUG_ON(i915_vma_is_closed(vma));
        GEM_BUG_ON(vma->flags & (I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND));
        GEM_BUG_ON(drm_mm_node_allocated(&vma->node));
 
                GEM_BUG_ON(i915_gem_active_isset(&vma->last_read[i]));
        GEM_BUG_ON(i915_gem_active_isset(&vma->last_fence));
 
+       list_del(&vma->obj_link);
        list_del(&vma->vm_link);
+
        if (!i915_vma_is_ggtt(vma))
                i915_ppgtt_put(i915_vm_to_ppgtt(vma->vm));
 
        GEM_BUG_ON(i915_vma_is_closed(vma));
        vma->flags |= I915_VMA_CLOSED;
 
-       list_del(&vma->obj_link);
        rb_erase(&vma->obj_node, &vma->obj->vma_tree);
 
        if (!i915_vma_is_active(vma) && !i915_vma_is_pinned(vma))