for (i = 0; i < dev_priv->num_fence_regs; i++) {
                struct drm_i915_fence_reg *reg = &dev_priv->fence_regs[i];
 
-               i915_gem_write_fence(dev, i, NULL);
-
                if (reg->obj)
                        i915_gem_object_fence_lost(reg->obj);
 
+               i915_gem_write_fence(dev, i, NULL);
+
                reg->pin_count = 0;
                reg->obj = NULL;
                INIT_LIST_HEAD(®->lru_list);
 i915_gem_object_put_fence(struct drm_i915_gem_object *obj)
 {
        struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
+       struct drm_i915_fence_reg *fence;
        int ret;
 
        ret = i915_gem_object_wait_fence(obj);
        if (obj->fence_reg == I915_FENCE_REG_NONE)
                return 0;
 
-       i915_gem_object_update_fence(obj,
-                                    &dev_priv->fence_regs[obj->fence_reg],
-                                    false);
+       fence = &dev_priv->fence_regs[obj->fence_reg];
+
        i915_gem_object_fence_lost(obj);
+       i915_gem_object_update_fence(obj, fence, false);
 
        return 0;
 }