mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 23:22:31 +02:00
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: Taotao Chen <chentaotao@didiglobal.com> Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com> Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com> Link: https://lore.kernel.org/r/20250822030651.28099-2-chentaotao@didiglobal.com
This commit is contained in:
parent
e296a2266c
commit
6fa6c7a50e
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user