Commit 6fa6c7a5 authored by Taotao Chen's avatar Taotao Chen Committed by Andi Shyti
Browse files

drm/i915: Fix incorrect error handling in shmem_pwrite()



shmem_pwrite() currently checks for short writes before negative error
codes, which can overwrite real errors (e.g., -EFBIG) with -EIO.
Reorder the checks to return negative errors first, then handle short
writes.

Signed-off-by: default avatarTaotao Chen <chentaotao@didiglobal.com>
Reviewed-by: default avatarAndi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: default avatarAndi Shyti <andi.shyti@linux.intel.com>
Link: https://lore.kernel.org/r/20250822030651.28099-2-chentaotao@didiglobal.com
parent e296a226
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -441,11 +441,20 @@ shmem_pwrite(struct drm_i915_gem_object *obj,
	written = file->f_op->write_iter(&kiocb, &iter);
	BUG_ON(written == -EIOCBQUEUED);

	if (written != size)
		return -EIO;

	/*
	 * First, check if write_iter returned a negative error.
	 * If the write failed, return the real error code immediately.
	 * This prevents it from being overwritten by the short write check below.
	 */
	if (written < 0)
		return written;
	/*
	 * Check for a short write (written bytes != requested size).
	 * Even if some data was written, return -EIO to indicate that the
	 * write was not fully completed.
	 */
	if (written != size)
		return -EIO;

	return 0;
}