From nobody Mon Apr 6 09:19:43 2026 Received: from mail-pj1-f68.google.com (mail-pj1-f68.google.com [209.85.216.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 866B1355F59 for ; Fri, 20 Mar 2026 06:55:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773989707; cv=none; b=fi2rfe8Alnqj/EqC4l+IsHb2Pag86ijMKAOCLIVLoCar2cMU3Nm5cH/buyCygPUAwaJl3enfEsF6HMMus1GQPs4JUiwh2HWjUSfGWMAwSdYZgeRoHEjzhIzI/u1Hn2LfrAPhP5Fh5wfsjKypmMmfKmNwlFbVdI9PyH7Q70iBwho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773989707; c=relaxed/simple; bh=uXLfWBJDoPAqsAKPllt+3NeX9xk1Fg8r36x1efbvFUA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=lSAoAxF7v0yvLl3xMhzGHTPfTGVvMypNkZND1mZ5R0kYm6jQ/B/FnIQjLNGKRAO2cWLOhmn9doA6+UXjXOkKJpbDtljVU4TKkhgmhFOsNR4on8iFMRAVO2IWKo8W9V+uOoPY5gddIflmMNNWtt3l6xcarKAyI7yMbpzJGTzfVs0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TFDQjIhW; arc=none smtp.client-ip=209.85.216.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TFDQjIhW" Received: by mail-pj1-f68.google.com with SMTP id 98e67ed59e1d1-35ba749f441so1635912a91.1 for ; Thu, 19 Mar 2026 23:55:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773989705; x=1774594505; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=JE3e8Ok253WLuIQMkkF5cVdS7DBSHkCSg6Us16Jdk5o=; b=TFDQjIhW3yXKtQ1VVaT9EXzNYfkuPwlJL2vkmspHJbHnLzedZH6pDL+ChAjAJxMtyM 9lkzz5I19clCnlaE1FvfduZre6kK2ypvUcsijyECXYnb1bHBgsVOJYO0X6UUuEUKAenc jUyi3DGc34RgbYo6+vCObxdc8dXYpk+v3G2e7duQDKOYXCisGkdPJRa/xDXbFrnI67iu EgT/PLRP8noM/k/HgNmP4g9fQMeFFWcGZDZwzyGmaJ/+KW0GZysTONyCB6V+/IuiXW21 e5BvJccYMIRaWhhxV21/3FvolbfppUPs907GcdckUqZdNW65piqZSEkBPxtwfIiuyFFj 3NHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773989705; x=1774594505; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=JE3e8Ok253WLuIQMkkF5cVdS7DBSHkCSg6Us16Jdk5o=; b=Jm16P8f+LbDBMwGDI9rxODNTr2RDQCoyJcKojrkuL5qd8G0CszIGkn3L6aHNcoBufj DwKbsp+KgtwDuYKlprC0+phEsFnVIoWNJWngCcMYoQEhR3IR+IqEbXTL4kIRWnim5PK9 JjE7uDq/M1w8hCZvZ5nxDMQmbyIFVVtZAWgcZa+IUU5jRGRFOHFgSZVL+eNVYmhHL505 5RuLEw690sUmjunglNocADjRz+U1RL8vLZIY+z0KLFJjmQ1JN4oR9Q8e++IbMKcPZsyc ygPWNKqzzsTp0BNV/Qr5fOCBPeKbn3/bkxvs/qRFkkxgarDYQdr79ftiJ0wn+NHthU3C eZYA== X-Forwarded-Encrypted: i=1; AJvYcCV0Kkr/0JmGOcdPCztSjMzqEhKufXaumpmLOLxbFwZm4NNpkLfJYsW5SKgnG38C6aDNnDE8VI10LHxnfuE=@vger.kernel.org X-Gm-Message-State: AOJu0YyDBLPIkZH5knpS1zgsmVMGJWofApU2xplQce1wAW63Dh9+naIL m2nnJZfggItlyy/bHN/1YTkDMReqCr+kEXZ5DJSGb9trvWCxJGQlNlk6 X-Gm-Gg: ATEYQzwdTL5ObcJjiyJMHJm8I6xqjTYbQbAWQ5W9aDTlvLpUF10Em0sjOUkFguFl7Av QeZJ688qfpJkQ/L8fNg8CLeRhxeH6zt38sI42O9RT9qCCXoObgrEheqB3YQW1GmFpXYX4UTVnpT 0NQErqhC5ES8QyRmLtNDokcDE9JOaP4zJyMKqc5thf2MTAGO2wVYDn53i6Q2HyJQhfTdx5hsrfv NWJ9llOcsmX8d87c0cXANq2LJ8rvtD8kgY3iTvG5d436QAcDqofu5Objf4xeWLPDurGWiOLljzF Wf0EnPgFPMBeHznyBHCJ63RKCzhLrtG1Mj5tVTWxKe34GHixMQ4L6H6OeSb33fKF28QABS080tb a5Rdd2ako84Hxfoe4WXQg/9iNn2oulMmESlkbeRwwVmkeWxl24B6eTCW8XZfDW4FkrGMFJ/lJRx m1bYZBDIdnDnXGAVvFG/B1Y3xPLHxR1+ByaoUhw9Nk7Eh/K1poYC36jtfUDBcZosa2se+brS5Go W6C+G1Hqu32SmHzo4LVSy0pe5eG5JIMIBCR65gK X-Received: by 2002:a17:90b:3952:b0:35b:a7be:ae68 with SMTP id 98e67ed59e1d1-35bd2d34560mr1430310a91.30.1773989704739; Thu, 19 Mar 2026 23:55:04 -0700 (PDT) Received: from CN4GKQDX76.bytedance.net ([61.213.176.56]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35bc60eca2dsm4518420a91.11.2026.03.19.23.55.02 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 19 Mar 2026 23:55:04 -0700 (PDT) From: Zile Xiong To: Tomasz Figa , Marek Szyprowski , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Zile Xiong Subject: [RFC PATCH] media: vb2: use ssize_t for vb2_read/vb2_write Date: Fri, 20 Mar 2026 14:54:45 +0800 Message-ID: <20260320065445.75351-1-xiongzile99@gmail.com> X-Mailer: git-send-email 2.52.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" vb2_read() and vb2_write() return size_t, but propagate negative errno values from __vb2_perform_fileio(). This relies on implicit signed/unsigned conversions in callers (e.g. vb2_fop_read()) to recover error codes: __vb2_perform_fileio() -> -EINVAL vb2_read() -> (size_t)-EINVAL vb2_fop_read() -> -EINVAL This relies on implicit conversions that are not obvious. These helpers are exported (EXPORT_SYMBOL_GPL) and part of the vb2 API, so changing their return type may affect existing users. However, they conceptually follow read/write semantics, where ssize_t is typically used to return either a byte count or a negative error code. Switch vb2_read() and vb2_write() to ssize_t, and update __vb2_perform_fileio() accordingly. This is an RFC to gather feedback. Signed-off-by: Zile Xiong Acked-by: Marek Szyprowski --- drivers/media/common/videobuf2/videobuf2-core.c | 6 +++--- include/media/videobuf2-core.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/medi= a/common/videobuf2/videobuf2-core.c index adf668b213c2..8a2b8156e9da 100644 --- a/drivers/media/common/videobuf2/videobuf2-core.c +++ b/drivers/media/common/videobuf2/videobuf2-core.c @@ -2990,7 +2990,7 @@ static int __vb2_cleanup_fileio(struct vb2_queue *q) * @nonblock: mode selector (1 means blocking calls, 0 means nonblocking) * @read: access mode selector (1 means read, 0 means write) */ -static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data,= size_t count, +static ssize_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data= , size_t count, loff_t *ppos, int nonblock, int read) { struct vb2_fileio_data *fileio; @@ -3154,14 +3154,14 @@ static size_t __vb2_perform_fileio(struct vb2_queue= *q, char __user *data, size_ return ret; } =20 -size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, +ssize_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, loff_t *ppos, int nonblocking) { return __vb2_perform_fileio(q, data, count, ppos, nonblocking, 1); } EXPORT_SYMBOL_GPL(vb2_read); =20 -size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t coun= t, +ssize_t vb2_write(struct vb2_queue *q, const char __user *data, size_t cou= nt, loff_t *ppos, int nonblocking) { return __vb2_perform_fileio(q, (char __user *) data, count, diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h index 4424d481d7f7..bf20bcb1d366 100644 --- a/include/media/videobuf2-core.h +++ b/include/media/videobuf2-core.h @@ -1093,7 +1093,7 @@ __poll_t vb2_core_poll(struct vb2_queue *q, struct fi= le *file, * @ppos: file handle position tracking pointer * @nonblock: mode selector (1 means blocking calls, 0 means nonblocking) */ -size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, +ssize_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, loff_t *ppos, int nonblock); /** * vb2_write() - implements write() syscall logic. @@ -1103,7 +1103,7 @@ size_t vb2_read(struct vb2_queue *q, char __user *dat= a, size_t count, * @ppos: file handle position tracking pointer * @nonblock: mode selector (1 means blocking calls, 0 means nonblocking) */ -size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t coun= t, +ssize_t vb2_write(struct vb2_queue *q, const char __user *data, size_t cou= nt, loff_t *ppos, int nonblock); =20 /** --=20 2.39.5