From nobody Wed Dec 17 08:57:57 2025 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (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 7FEF812B71 for ; Wed, 19 Mar 2025 00:15:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343340; cv=none; b=OuU5Jh1axwQW14gB54kAH9uTf/GnoYnpOPzV8StBMpUpwHJ1USRkh0MhSb8jSxbBSKNzAHho83RgzOuK/wXtpwZJzAb5D9BUKxtPNQM6k3pQVpQlWwBsJhkT3kuh+d/rV8RybAY3QQ3HIr4fZrumOG01RPXvR/nvTRiqlZ1/7Gs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343340; c=relaxed/simple; bh=F+Fl+hJmeyq3YWzTs6D9ZDaWGOG6IPUOQDfOlysIeuw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o2P7sWwGdjURUIiGxPDrGHj9XOHRs7BOA/65AVYInKcm/APc3QxKugURWFYI9KRvfnj+4aXK25bQlRQOVKzqvUaVpybwUqXwMrHurjE1ddaM1DSIM6CWsyLCHvn6Ar3fGMmVTjMjdSKJobk+o05mUPIWIB38kT/cmH/gbbMAUs8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=c15ZypT8; arc=none smtp.client-ip=209.85.216.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="c15ZypT8" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-2ff797f8f1bso6173239a91.3 for ; Tue, 18 Mar 2025 17:15:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343338; x=1742948138; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ciean/zWrbirFJ6x0i1/pN9FA0IKn0ZUFy/flQBxt2c=; b=c15ZypT8L1mzw749Vu6yvbOQWTg1d566iXrxBwFUrtc04MkaXhvFKCRKYekK66oUAe hniCMAklfD3Okow66BOahdsnXukn+F4oQMvLgsBOSizEUMOcBMjoBpiUQYnPgv6OUxjM DqbVqJAsPDX3z3pJnmykkXGWnIM9tc5E4SuiM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343338; x=1742948138; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ciean/zWrbirFJ6x0i1/pN9FA0IKn0ZUFy/flQBxt2c=; b=anIbcMp6TAkTmq4rBKX1MDVVkbsM5R9OTnLaAG8epX7wl95c6xCMTisZO0X48Llm02 mfJIIel8jaa4XZlbge9n7QO2nvMYnrbAsi+/G/LbgCWLJ539S9D7no8kXtKaLqttRkZ5 FzIA1k9/ook/JNS/qwMXCam0+IXGX6AgDQH709hc/8q9Lqj6q6fPqcXuBnbqN2LSouXc 13tGr//SSZ99XqdR6HZWixe5RrZhZyhhnr3I11jbsj18VdHyxwAr8qeUn8kBAKBqXfbg duVlSVmE2oHnIYP+yHaKAoBl7EDqO15Iv9tpmIOsV4NaKO5Mfr5p70DHOnE3Km6az37p NtVQ== X-Gm-Message-State: AOJu0YwhQGXHhpgIBfebEsgZwS4NNfdyLsmigYYC/QHJ90NEZfbX6YUC NftoTr+yoNN1qzDVZEOC1pIevj3xjjSJo7t+0ea4f3TS7MfchdTbJXSJrDBZ7uE= X-Gm-Gg: ASbGncvAH2+76NCYXArF1STUEr0tGiR+/TQMlUwjVzN0UXm61LMoSBsgM3WHnwRcdDm +VMfuMv1K1Fuhhdg4fgv/vWM3riOCx5eaZmRKLPB1lhlac4yG0vp+CSZlcmVFncL9Rs4J9fxUr0 fRA6f+oZ85cz6IXMYHpC/T6S2CjEeZNAyqDwWzdLDbeVeZBan8itnM5Od6ZTYYC3v3PYES3x5sm DLZE9G7c5cP3V6nCPXFYKpX/aZ8EC2d7XeKBZ9bhz6fGKB9Xrxevi3Nt5UgXppLFjtE5KZtlpUs XRrIDjeP/eUtrWa0TaFCzdQPrxcguuElXvG540ycJRDuRjGyRidRWgN6wqtIcqA= X-Google-Smtp-Source: AGHT+IHkLC7P0qxfNOZ7am8oGQAhk+QCLx5pooxaYbMLyunCN1d9iFhe6ACMIi4+onLyvuY52I93jw== X-Received: by 2002:a17:90b:17c5:b0:2fe:b907:3b05 with SMTP id 98e67ed59e1d1-301be205cfamr891476a91.29.1742343337829; Tue, 18 Mar 2025 17:15:37 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:37 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 01/10] splice: Add ubuf_info to prepare for ZC Date: Wed, 19 Mar 2025 00:15:12 +0000 Message-ID: <20250319001521.53249-2-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> 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" Update struct splice_desc to include ubuf_info to prepare splice for zero copy notifications. Signed-off-by: Joe Damato --- include/linux/splice.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/linux/splice.h b/include/linux/splice.h index 9dec4861d09f..7477df3916e2 100644 --- a/include/linux/splice.h +++ b/include/linux/splice.h @@ -10,6 +10,7 @@ #define SPLICE_H =20 #include +#include =20 /* * Flags passed in from splice/tee/vmsplice @@ -43,6 +44,7 @@ struct splice_desc { loff_t *opos; /* sendfile: output position */ size_t num_spliced; /* number of bytes already spliced */ bool need_wakeup; /* need to wake up writer */ + struct ubuf_info *ubuf_info; /* zerocopy infrastructure */ }; =20 struct partial_page { --=20 2.43.0 From nobody Wed Dec 17 08:57:57 2025 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 30B6B86352 for ; Wed, 19 Mar 2025 00:15:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343342; cv=none; b=MK8arH4tuyVFiJRT8ghKrGm+0gzurrf1+Ld4gQ0Qv2gab/hNIuTn2yWmJxtwsGgOzy/4dc552o5lZoz7Hv062obL62HEhcLvFJvDk8YDHLS+XPPvCaSfW8wHXBSpdTDyiSlZNDbVQqUQKEDzYQdbCnssjCmK5b6hz3gbcCkVH2g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343342; c=relaxed/simple; bh=zDwqRePv1ZFUDi9FjMPQDVKfJ1n1RRe7hhmBOVzyCME=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EzcWg8nyIcqtQDUlAH43sHg7WMEpNHXYSA3as7yVV+V18OLR3E9p2hd7OoQ5jRIii3rbORFJrnggcyJRzJb9gd+HlB9vG/RY+X34CJRKujUv6r1w2QHIGmASe5XAEQXNUt2C2VscbWKf8QDIgjsNTTYqRORT9AtiQ5JVus/nPHs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=gMn0Gk81; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="gMn0Gk81" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-2f9d3d0f55dso7213669a91.1 for ; Tue, 18 Mar 2025 17:15:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343339; x=1742948139; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Jx2MMZGi/yQrztop394w65c9xYaCiVDt+AK5Yt9ywsM=; b=gMn0Gk81p6q/vZ4LGycCtV8PrWqmKL2X2+1X7JUYuAk7MxmnWIJuOfblGJYKzH1qHS NHGtmlgyX/4nIO0x+NDViqz93DL2F52q8hztCpCwajF3yIzTdhN8LJJc8uSXOkRRSbyx r8JDzvsMP8tNb3e/DiHLdTjOx59RF5ciEg/mU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343339; x=1742948139; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Jx2MMZGi/yQrztop394w65c9xYaCiVDt+AK5Yt9ywsM=; b=cwMwf/4qS00JMaNhA1KTwJis+hpD/4UPnDD6MBfNUQfADlfds8ZyEi7XrwK3hVP1+S ZnpuX3AYCh2OV+uWCobUVWX3xbzXiNNAWf6D3hFYZPv6i9jMjc+DNGY+VQUzdQUOULqk YA56+Myr2ardSr5c2tgQmFJT4n7p1Lg/DvLzAJLNxdCoKTYCG0OisxT/lgLKBEqUGqT/ niZRDswMN8a1dJyEx41YjJZz++wBi267fmjhBS2ulMAg39QdXJJ+WjSn8+wdlX4Oq+yy Yr0b82wzO6AABGJLO3XQBJlAbx4Zk5r4wXtKBqU5ff77hmpL8ZhKsZhKXWR/+Q7JNL3P L82Q== X-Gm-Message-State: AOJu0YwGLlFnnb/c9qpgnOWDLAZeJY+hLcrDKrHmbffneXaLJLCquAWn 6eNxmyfEmqdWEaRusb8Shm0nw/IC3HUA2YqZFLOhYyQidMi3kw6fBDtYUEOKarTEHt09+yuGIWX 1 X-Gm-Gg: ASbGncsiW7YxJdKxxTMY9TQir6Mj+YNI9+U/NKafOosRIkQbcP8FECMiPSmE9T1BTub WhucZYThTceUnWISoEXOfiGIdzWw/PhQ3FEW7lff4UZRwHOt3EfVV0dN6R365CQC5bTaWm0lhP8 xTRb6d3PlRKIAF0IqOoXv+cT10gFZHyJwqFIErWsllEPVE//i/40zdbFwLfL28snJjhGc1O08uy EVmqrlJrGiBetqfir3b8Y9Eg4DeJuIxbWD3A9upDe4H7DhDYWmfReoXSQt/684g4dLgPdfkEQOB wsxynUOiopc5Pb5jFANryCZS0ehKX2JbOqV44qQ6E999Nyd5+cVUXr9FoDp/tRg= X-Google-Smtp-Source: AGHT+IEnc6PYsekT6MewbYE2xz5zbksEbwPRypdKB1fVzKJg+O8NyDF3d1M1ZZ7rEg687HtSnDkx0Q== X-Received: by 2002:a17:90b:2f44:b0:2ff:5357:1c7f with SMTP id 98e67ed59e1d1-301be204e8dmr956493a91.30.1742343339529; Tue, 18 Mar 2025 17:15:39 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:39 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 02/10] splice: Add helper that passes through splice_desc Date: Wed, 19 Mar 2025 00:15:13 +0000 Message-ID: <20250319001521.53249-3-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> 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" Add do_splice_from_sd which takes splice_desc as an argument. This helper is just a wrapper around splice_write but will be extended. Use the helper from existing splice code. Signed-off-by: Joe Damato --- fs/splice.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/fs/splice.c b/fs/splice.c index 2898fa1e9e63..9575074a1296 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -941,6 +941,15 @@ static ssize_t do_splice_from(struct pipe_inode_info *= pipe, struct file *out, return out->f_op->splice_write(pipe, out, ppos, len, flags); } =20 +static ssize_t do_splice_from_sd(struct pipe_inode_info *pipe, struct file= *out, + struct splice_desc *sd) +{ + if (unlikely(!out->f_op->splice_write)) + return warn_unsupported(out, "write"); + return out->f_op->splice_write(pipe, out, sd->opos, sd->total_len, + sd->flags); +} + /* * Indicate to the caller that there was a premature EOF when reading from= the * source and the caller didn't indicate they would be sending more data a= fter @@ -1161,7 +1170,7 @@ static int direct_splice_actor(struct pipe_inode_info= *pipe, long ret; =20 file_start_write(file); - ret =3D do_splice_from(pipe, file, sd->opos, sd->total_len, sd->flags); + ret =3D do_splice_from_sd(pipe, file, sd); file_end_write(file); return ret; } @@ -1171,7 +1180,7 @@ static int splice_file_range_actor(struct pipe_inode_= info *pipe, { struct file *file =3D sd->u.file; =20 - return do_splice_from(pipe, file, sd->opos, sd->total_len, sd->flags); + return do_splice_from_sd(pipe, file, sd); } =20 static void direct_file_splice_eof(struct splice_desc *sd) --=20 2.43.0 From nobody Wed Dec 17 08:57:57 2025 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 E2E6413C690 for ; Wed, 19 Mar 2025 00:15:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343344; cv=none; b=gQwBsov0ZFr3o2G3YZemKx5QpdXQeuEhCpzl4Zp+VztpNB9JRIIi/aqZ45LfBVbPjy5pc0s8f9SadtR/JgZwVloi6YDV8dzbXoRL/k4MQHDwUbu5+/bcqaEw50nADHPbmyRKF/wOGnCUJ51bqyRis8Wn/wIQvRdOFH/vNSuOGsM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343344; c=relaxed/simple; bh=4XmeV+SwsUckbKoljf1imPQeQxED4NvPOSxU0C/rldo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kbsf2MDQ9enJlI5fHNRvNDYaCvj6Prv/qXYdANnUiDUVUiAYkIGN+rEJdXqrR0eagvixJxcby77V+0KiRUM16qEsDMVc7KCT1aS50GOQz7vSyKVUbCUG7DoBZeMLFebTMbDhiK7qVkrJRGXZNK00e38/WriuCilxpFhfauc64Kg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=LNZH3qR1; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="LNZH3qR1" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-22403cbb47fso118237095ad.0 for ; Tue, 18 Mar 2025 17:15:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343341; x=1742948141; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=js3UD04AvSWxrN9RHcwFb61ujoiYEshPhpsTiZDgHgM=; b=LNZH3qR1uWFDzF9bQC0jRqVCxBj0XhnnQKxLQt53RWWbP9Ddo4X5mxjbDYeRlz2b8g x92shF+UhIOeahYVFcSmf9FaeuocEomstZDZHCQEL0sYgMlcbxhXxMb5QxYWnWuET5MM xadfXaJoHP5VER3ZT3b4hxYUwe7HeFijMPl14= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343341; x=1742948141; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=js3UD04AvSWxrN9RHcwFb61ujoiYEshPhpsTiZDgHgM=; b=d6jy4yLwwGJav7mhYXmibGEB4yNkVkpZ//qcFuCEqDhFCqyG5zF3oMLoChnqBnPEdP NAyui1/KE+cDlZI8GNcbiVrVj6L34VEVrS8xta1HYfO57pWSq0w9jomSd9sAamtZ5SE/ b8hSBX0RBw3ZVckcg4v0jSPpwgOiBgCEyBgtnDLne5DZajdWJbAfQ5v8owE6HSrcBxnm JEhHWgaI7ORpZsvxdzz0ZzFzrhlEXjy+GuSrVVMFkmZNmdrns+4cfx8g+sJR8eieDxSb 9SjeJ2lYajpnho+JGbBsx9cCyZBGNwOpSjkkFVsuh+970v8mDLN6FggGp6b+ZkqZud7a gV9w== X-Gm-Message-State: AOJu0Yx4IOY/GC+XVdim+80QGGbHMA9ZotPao9uBbTzAEPDYU7bqyaHh l2A+svx7jWC15ahDTbNSyEyTFiKQYv+M4dNWbYUeL1hmezF57i3/qoRYX194cUg= X-Gm-Gg: ASbGnctOMY6ix6M7itGv19lhWt+Dd0jJo92IL06YpLmeHvkaH4oC/j8hFyqqVNyUqVJ Fnv/Zal+xdeBy0wDUyrzqfh/q9QQ9ZrxwrtodZA12J8f615X8v+R29ku0KM746wonVIaFUtS4Jj /HGgQGpHWRTeQt1Wpjetyk1W2XZx0bNuegvCd9RvkTqtXWVLSSeQYUbORZKigHLBI2Z6QsbhnSV A7fZAxmUw4WZCtUXDpbEXnZIep3TGyeirqc++xWgHFu3FYLnDD3EV9LZh6nwjnTYy0KkAGvsha0 A5NrrBf360l7ZMO4h69nLfXK76mq5BcWEjV6v0f36a1Y2HEtHZUiazt7pfXV7qY= X-Google-Smtp-Source: AGHT+IH7oXUPwBlv8OzKX6l4S7tFotTPIWvWoF6rpoUJjb85+9JTpVERsJIAUNLcb6oCGgVeRTkFdg== X-Received: by 2002:a17:902:ea07:b0:220:fb23:48df with SMTP id d9443c01a7336-22649caa9ebmr8193745ad.36.1742343341302; Tue, 18 Mar 2025 17:15:41 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:40 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 03/10] splice: Factor splice_socket into a helper Date: Wed, 19 Mar 2025 00:15:14 +0000 Message-ID: <20250319001521.53249-4-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> 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" splice_socket becomes a wrapper around splice_socket_generic which takes a ubuf pointer to prepare for zerocopy notifications. Signed-off-by: Joe Damato --- fs/splice.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/fs/splice.c b/fs/splice.c index 9575074a1296..1f27ce6d1c34 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -37,6 +37,8 @@ #include #include =20 +#include + #include "internal.h" =20 /* @@ -783,21 +785,10 @@ iter_file_splice_write(struct pipe_inode_info *pipe, = struct file *out, EXPORT_SYMBOL(iter_file_splice_write); =20 #ifdef CONFIG_NET -/** - * splice_to_socket - splice data from a pipe to a socket - * @pipe: pipe to splice from - * @out: socket to write to - * @ppos: position in @out - * @len: number of bytes to splice - * @flags: splice modifier flags - * - * Description: - * Will send @len bytes from the pipe to a network socket. No data copy= ing - * is involved. - * - */ -ssize_t splice_to_socket(struct pipe_inode_info *pipe, struct file *out, - loff_t *ppos, size_t len, unsigned int flags) +static ssize_t splice_socket_generic(struct pipe_inode_info *pipe, + struct file *out, loff_t *ppos, + size_t len, unsigned int flags, + struct ubuf_info *ubuf_info) { struct socket *sock =3D sock_from_file(out); struct bio_vec bvec[16]; @@ -920,6 +911,25 @@ ssize_t splice_to_socket(struct pipe_inode_info *pipe,= struct file *out, wakeup_pipe_writers(pipe); return spliced ?: ret; } + +/** + * splice_to_socket - splice data from a pipe to a socket + * @pipe: pipe to splice from + * @out: socket to write to + * @ppos: position in @out + * @len: number of bytes to splice + * @flags: splice modifier flags + * + * Description: + * Will send @len bytes from the pipe to a network socket. No data copy= ing + * is involved. + * + */ +ssize_t splice_to_socket(struct pipe_inode_info *pipe, struct file *out, + loff_t *ppos, size_t len, unsigned int flags) +{ + return splice_socket_generic(pipe, out, ppos, len, flags, NULL); +} #endif =20 static int warn_unsupported(struct file *file, const char *op) --=20 2.43.0 From nobody Wed Dec 17 08:57:57 2025 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 9DE7015A864 for ; Wed, 19 Mar 2025 00:15:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343345; cv=none; b=bX7SQ29TztJU8egXzRnEeLc3CMe4JucNsjiWwBnUDjsR7zq/Vqwtyl2tcfXDAYY8lgP/ewAMCZAtgdOhCGajYllBsEab8FzvFm1UFR3O+6nj7xS4p3VZ8uLMiAm2/zPgkOVWLJeaxLL+JsTPoK61fBBFXlWKXCo8J9b1JZNfbyw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343345; c=relaxed/simple; bh=SowAWf3suxdJmhbIj/+rpT/CNsAYNCCACOuR5s/3LGE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cgCd0DEr7npH688DR6JwUCmbcxkJmOZPZnWHfpFESIVf0XIuJRczXrHxhf6FOYuT4l3dSnpiLJjltjuOk1IqShrP/Nx96+7JM7U/6vAxvOONShHkqFj8YDZgEO7E89r2HFwflOdEY48gBMhGCiJlYZngzh0hmPGVWn2DjJk6wEc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=gIVpTV15; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="gIVpTV15" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2254e0b4b79so19025445ad.2 for ; Tue, 18 Mar 2025 17:15:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343343; x=1742948143; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0BqxlSUPLPLK+n0IEZ/na32d+xFXeCa925E/NE7WMKY=; b=gIVpTV15hhkkYilj5BypVWGWlzUL3CqQ72S1nz2FWsVuUY16SNpf5KQkU11mnaTAKn 1WaoeJcNBjDgCS32IwIWKfkUfCs3oFZs0wmmQtBRsXJzqoJr4KgKFKcmXmUWyDSv1UL4 BoqqJF1llr2ptP6/5CELh0Zkw4SLxiefAIwMU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343343; x=1742948143; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0BqxlSUPLPLK+n0IEZ/na32d+xFXeCa925E/NE7WMKY=; b=iiwQ7uKCCcpTzVaA//qMTylA65QW2kG19wMHBC2OtBrUr9SudLf0jCZnWG/Ty4z8c9 6vHtJhTC2uu149xEjQl8cMP603OZHtnynWT2SSr5yMXeL9Ykk2vwVmigZZZMfb926Hy5 sSbTROgYZVYAVnd1MhgSzshkUWheZ7AE/n+uuyzfsWQYeNsPGq1EbmY8OjryuEDRtqDq HtkxtpUtBfYmZUsGMiyxb3Qgc3TEOcQRUcs52o6p6q5ObxFYJ3hZIbAMKWXI+jMJQsmB eY05KiL2nxkfuqSBb4X7i/6hoZXOmd5uCcAvtTTI8l6kx3fULqt4apxm3MXlVoNWKqBa WUCg== X-Gm-Message-State: AOJu0Yw93bmVon6uNRUqpg50ilMlb0JvxCjyUHjyd9xgk9fqKFehHmjP IAYu1ttzJ4JadnFIuG+FQuO8enNiuGPlk4ZHsvUOohS73wr//49aDqKm+aAmWcg0aw0vDqOyI6q 5 X-Gm-Gg: ASbGnct+jV1vREbY2SpLaIqbDxAWwfVS55ZWSsNIV2G+dMwxU2Bk56ZVqphJwfgYn5g nFJJuW90B4nFs+BcdJMaOoCYZjbqlm6TEJmywM4nnotnBc+lEhDO117i1SSrf43WM47v3RrfOzu NXwoJHI/OHx+Bw6+jWONW/z+ENLdhmktaaomoZlUJzmc/aPuj2NmVwap+pySmiYhB4Lzx5Oa0wo j8Kr0nk3nOqOJNPVIb85BRQtVXZxb6NPX61Qs5FbpNr+mvAkEp1sq2W9BefVoKaJ0fRFyi6qMir noho9e7FcMBxzOrfnJJkCJhOqzL2XSzu/coeV+juO22eVNeMnTZY X-Google-Smtp-Source: AGHT+IFxyw3nvWmVaD9tl0lJBbbnI8q3NC7K/P2umCsKr9U07OgWwl21w/NuymcNKusQI296uT0O6g== X-Received: by 2002:a17:903:1cb:b0:224:76f:9e45 with SMTP id d9443c01a7336-22649a3476fmr9616615ad.21.1742343343024; Tue, 18 Mar 2025 17:15:43 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:42 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 04/10] splice: Add SPLICE_F_ZC and attach ubuf Date: Wed, 19 Mar 2025 00:15:15 +0000 Message-ID: <20250319001521.53249-5-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> 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" Add the SPLICE_F_ZC flag and when it is set, allocate a ubuf and attach it to generate zerocopy notifications. Signed-off-by: Joe Damato --- fs/splice.c | 20 ++++++++++++++++++++ include/linux/splice.h | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/fs/splice.c b/fs/splice.c index 1f27ce6d1c34..6dc60f47f84e 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -875,6 +875,11 @@ static ssize_t splice_socket_generic(struct pipe_inode= _info *pipe, if (out->f_flags & O_NONBLOCK) msg.msg_flags |=3D MSG_DONTWAIT; =20 + if (unlikely(flags & SPLICE_F_ZC) && ubuf_info) { + msg.msg_flags =3D MSG_ZEROCOPY; + msg.msg_ubuf =3D ubuf_info; + } + iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, bvec, bc, len - remain); ret =3D sock_sendmsg(sock, &msg); @@ -1223,12 +1228,27 @@ static ssize_t do_splice_direct_actor(struct file *= in, loff_t *ppos, if (unlikely(out->f_flags & O_APPEND)) return -EINVAL; =20 + if (unlikely(flags & SPLICE_F_ZC)) { + struct socket *sock =3D sock_from_file(out); + struct sock *sk =3D sock->sk; + struct ubuf_info *ubuf_info; + + ubuf_info =3D msg_zerocopy_realloc(sk, len, NULL); + if (!ubuf_info) + return -ENOMEM; + sd.ubuf_info =3D ubuf_info; + } + ret =3D splice_direct_to_actor(in, &sd, actor); if (ret > 0) *ppos =3D sd.pos; =20 + if (unlikely(flags & SPLICE_F_ZC)) + refcount_dec(&sd.ubuf_info->refcnt); + return ret; } + /** * do_splice_direct - splices data directly between two files * @in: file to splice from diff --git a/include/linux/splice.h b/include/linux/splice.h index 7477df3916e2..a88588cf2754 100644 --- a/include/linux/splice.h +++ b/include/linux/splice.h @@ -21,8 +21,9 @@ /* from/to, of course */ #define SPLICE_F_MORE (0x04) /* expect more data */ #define SPLICE_F_GIFT (0x08) /* pages passed in are a gift */ +#define SPLICE_F_ZC (0x10) /* generate zero copy notifications */ =20 -#define SPLICE_F_ALL (SPLICE_F_MOVE|SPLICE_F_NONBLOCK|SPLICE_F_MORE|SPLICE= _F_GIFT) +#define SPLICE_F_ALL (SPLICE_F_MOVE|SPLICE_F_NONBLOCK|SPLICE_F_MORE|SPLICE= _F_GIFT|SPLICE_F_ZC) =20 /* * Passed to the actors --=20 2.43.0 From nobody Wed Dec 17 08:57:57 2025 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (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 590FD17BA6 for ; Wed, 19 Mar 2025 00:15:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343348; cv=none; b=Mj+lHLTyzlgqnCBqRc2VsDJmgONvGWEOd1aw86EeSVuTXlwQ39m5qWSAcGmTOAuC1wpMJHxcmn9H8o6e8k+zFz7CGsErXJUfBivDXCypeQJAbBmW94zehP6SpnqZ15tWINsRrTmsnE+zysUBJAHO/ai4z8kkeOs5T9r5CLEVH3Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343348; c=relaxed/simple; bh=Fj2ZLr2NuM8eVI7Uv7KChJMeytj/MaTnY6KtSJCMWGg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=I30R9hNcstxtvt/Wjs90A+7fXzCGqBC+SXWOJ/W/6Z9ftCTOQUBJZG0JA4y2zIaeCiceb9Q/LaqiTm51jNdFpsyBTn5lpFdN/GVxPd2/l8MOMMVvD9nNznqE6pwmLgvXtLSEiXwplya26VHLPYg1tz7XeG/Mf/KIsOuBdXlPnk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=TEXnBMMg; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="TEXnBMMg" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-22580c9ee0aso108908855ad.2 for ; Tue, 18 Mar 2025 17:15:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343345; x=1742948145; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AZik9d5yBmYj5s2FfgR/QYgFrjABkp7Ts2fZAz7VStI=; b=TEXnBMMg1yHzHRSdTyjQ4M5eMSAi4cm6TcUSzBE4v7T1aqMx+wOwTc6oUD0kcfSZNL VOJK8MM3qhNyS6dcx/4/9GrwYPJewhpfQwpVTCu/Ze7UO/jFMU8c9KVklQf7I6DLAnX1 spB1gN/5SZKx0xAUSD3s1COypqv7dwxz8dYBk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343345; x=1742948145; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AZik9d5yBmYj5s2FfgR/QYgFrjABkp7Ts2fZAz7VStI=; b=NvFAFXOyRxZht15536Av7urEE6khqERqUVdwe2RU4wogSXcc3AQXNCTSISuWfCyBXg lUTSo2mmih+qozAFkPf1vhK/AFLK9EirxQfdccWDk06Fp+wKuJI6MJgqRvPuhcuTgGYa 3VQbV4zCrR9djaYROf2XNFIJ8hBtQBWSvNoHI/xNhpauQ/thdA4ycu99wtae6YsF8iqc pOlyJniwP12Yn1VFVvbJG3DXJazei55u0eqkn8Ttevp5nhdt/UyFS9ovV18wsPXtj26J +MpEGw9GWS/8uDvUU1+GB1XMZip4eTHCgaqJUe2HU7uq73q9Vxr7HHdSW2eHgbSR1+eq mqbg== X-Gm-Message-State: AOJu0YyjBtY6OZHZJrwgkgxKimUtnROOPPMf3gwhopyQu5IU/WqAsaSy Uo7ngENVyfa8vPRpLB5zjNRNyYv2I9Loh/HDuWIZc7H/bU1CnpOj2d2JgbNBExM= X-Gm-Gg: ASbGncvqkmU89Hrp9CEIpVdkGqV9Rg801zxGybMJGrjXEEvbwaYu6IkL1YPlpvHwl6J +TDKNb434IFM5VmeGV2vGXpF0xThckq4ZZ6BQtJ2FeuAffxTs0zeSJZ3+O1Y+yuuFDiMjUS7SxA Cr2Jr9FZMi3jPXkh71LT7t2Wf2wXVkCUn+8HD1nTFmtE1ytzCYZ1bih7Xgl3gSiaU5ez+VmKmMV BYe/zS0hktxvgLmdnzNEElFcoiZGxHqgPDnkz6ZAjqafaqF0xzoJeUZJ+z5eZUZrrFwDC7yDHk7 wMvHrKI/Y0l1uPVfNLaHE4jQjqS7mwp0JKZrFAUt6BWq4j8RqMRT X-Google-Smtp-Source: AGHT+IHOPH7tlvaKSgwzc5NrClMTJfkFBSLl86NoVpY2lwDOnHY3Yjh4FQI06/JOfl0Mx53H9CjTVw== X-Received: by 2002:a17:902:d4c9:b0:223:3bf6:7e64 with SMTP id d9443c01a7336-22649a33d25mr10033275ad.24.1742343344716; Tue, 18 Mar 2025 17:15:44 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:44 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 05/10] fs: Add splice_write_sd to file operations Date: Wed, 19 Mar 2025 00:15:16 +0000 Message-ID: <20250319001521.53249-6-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> 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" Introduce splice_write_sd to file operations and export a new helper for sockets splice_to_socket_sd to pass through the splice_desc context allowing the allocated ubuf to be attached. Signed-off-by: Joe Damato --- fs/splice.c | 22 ++++++++++++++++++---- include/linux/fs.h | 2 ++ include/linux/splice.h | 2 ++ net/socket.c | 1 + 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/fs/splice.c b/fs/splice.c index 6dc60f47f84e..d08fa2a6d930 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -935,6 +935,16 @@ ssize_t splice_to_socket(struct pipe_inode_info *pipe,= struct file *out, { return splice_socket_generic(pipe, out, ppos, len, flags, NULL); } + +ssize_t splice_to_socket_sd(struct pipe_inode_info *pipe, + struct file *out, struct splice_desc *sd) +{ + ssize_t ret; + + ret =3D splice_socket_generic(pipe, out, sd->opos, sd->total_len, + sd->flags, sd->ubuf_info); + return ret; +} #endif =20 static int warn_unsupported(struct file *file, const char *op) @@ -959,10 +969,14 @@ static ssize_t do_splice_from(struct pipe_inode_info = *pipe, struct file *out, static ssize_t do_splice_from_sd(struct pipe_inode_info *pipe, struct file= *out, struct splice_desc *sd) { - if (unlikely(!out->f_op->splice_write)) - return warn_unsupported(out, "write"); - return out->f_op->splice_write(pipe, out, sd->opos, sd->total_len, - sd->flags); + if (likely(!(sd->flags & SPLICE_F_ZC))) { + if (unlikely(!out->f_op->splice_write)) + return warn_unsupported(out, "write"); + return out->f_op->splice_write(pipe, out, sd->opos, + sd->total_len, sd->flags); + } else { + return out->f_op->splice_write_sd(pipe, out, sd); + } } =20 /* diff --git a/include/linux/fs.h b/include/linux/fs.h index 7e29433c5ecc..843e8b8a1d4d 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2065,6 +2065,7 @@ struct dir_context { struct iov_iter; struct io_uring_cmd; struct offset_ctx; +struct splice_desc; =20 typedef unsigned int __bitwise fop_flags_t; =20 @@ -2093,6 +2094,7 @@ struct file_operations { int (*check_flags)(int); int (*flock) (struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *= , size_t, unsigned int); + ssize_t (*splice_write_sd)(struct pipe_inode_info *, struct file *, struc= t splice_desc *); ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *,= size_t, unsigned int); void (*splice_eof)(struct file *file); int (*setlease)(struct file *, int, struct file_lease **, void **); diff --git a/include/linux/splice.h b/include/linux/splice.h index a88588cf2754..356b8cae4818 100644 --- a/include/linux/splice.h +++ b/include/linux/splice.h @@ -100,6 +100,8 @@ static inline long splice_copy_file_range(struct file *= in, loff_t pos_in, =20 ssize_t do_tee(struct file *in, struct file *out, size_t len, unsigned int flags); +ssize_t splice_to_socket_sd(struct pipe_inode_info *pipe, struct file *out, + struct splice_desc *sd); ssize_t splice_to_socket(struct pipe_inode_info *pipe, struct file *out, loff_t *ppos, size_t len, unsigned int flags); =20 diff --git a/net/socket.c b/net/socket.c index 9a117248f18f..4baf26a36477 100644 --- a/net/socket.c +++ b/net/socket.c @@ -165,6 +165,7 @@ static const struct file_operations socket_file_ops =3D= { .release =3D sock_close, .fasync =3D sock_fasync, .splice_write =3D splice_to_socket, + .splice_write_sd =3D splice_to_socket_sd, .splice_read =3D sock_splice_read, .splice_eof =3D sock_splice_eof, .show_fdinfo =3D sock_show_fdinfo, --=20 2.43.0 From nobody Wed Dec 17 08:57:58 2025 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (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 382E11A9B5B for ; Wed, 19 Mar 2025 00:15:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343348; cv=none; b=DtgKyFe1ay+4+uaA4XvAXF5NSD6C0k1IjP2/974SVii4mn52EhsxygVUXa0eMUXSHgFfUtjkxgfzSGzGher8uD/U+oTnttecJfL5cdWryESntgDg+1o7kZ8ibmjX+wtI9wcf7XiChPYEn3tZZ3n8fr4jAoegkdhP7t4F3SuEZ+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343348; c=relaxed/simple; bh=5PCOzmacR5yYFup3o8g8dQwSPaboFM0aGB+HiTMI2DM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rmjqB5Ek4Z+kmnNt9EtWSQz2phCgxKjIEVcZZRDJv1fmQkqzlvRNwWfo3IbHmjBZU8vhjSo3Cl62yt51PrNDOBugQMbqHtriqBduya88DFJuBCoNmb+toZUc3jdsKmZSOOvjAL2kk/yXoDZLBk36AdCO5xDjwLhRooXaK9UNGMk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=YMPzI8dC; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="YMPzI8dC" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-224341bbc1dso119939455ad.3 for ; Tue, 18 Mar 2025 17:15:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343346; x=1742948146; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=A+Q0E5apPluO3qX6mmuEZ2SRhcKnzs7kllQ/gSC8Vl0=; b=YMPzI8dCZhmG0Jgrf9/z4ds0YcgMu4ROkPE9Wwm8zEbNQbTxIZakULjVeXB/WrXl+f m9Xf2ZWsM5ytUURf3JCxWr8GSMeMG9JXni/Zod7xJ40W92K1dPyhWLXmUAmwmAjY5WoO rG7RgM+Qm5FLNMSZ3wgnazMpZRemKFcKlKPuc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343346; x=1742948146; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=A+Q0E5apPluO3qX6mmuEZ2SRhcKnzs7kllQ/gSC8Vl0=; b=uW0GYbLbttGjNPjOCtgoz+rZ/ceC8JrSdRiV0bgKHqtsiQKwBAXPZoWdHCHB6RodUZ qJr9FGhqD4acxNz6ce/YflpEUn7hLsu2NkdzKXBzo/UmTHMVzGMTgr7mxMXQ2WhqWGA0 E7KSnmz9gkqzhpv0iWTErt6YK3ZxG0mg6dkH1c5QYuXiPoTzquPHz2nvUlVNNqa23d9y KqZFvPRD9IaTHwaf3nn0+puAPj84WtCbwJlvPMTNRI3uQ/gIa5pQ1eC8tR6vxuB3JWkx 1s4E5+fjGsYGyjmssy8JPClVO+wvSyIlmK8ydThgg+hKp0auIN3OOjztF49fybtAMJwa P3UQ== X-Gm-Message-State: AOJu0Yx+fjSmHtmq+V1ORbePKsBcFIZKyHqMUQaToS49Cm/iBmwaxEP6 YWoYq0m0ybTqqKkv1czE3JkFEYq0PsXhjxhO3SQalYH/aVVvyZO9mLcV6Alb0m8= X-Gm-Gg: ASbGncvX2EnNdtj0K8Af9YuA+VR6yOs3uWekBPy2SbqLPUWvmTyJzVZj9llE8SYrtKi SLHlQLMTzY5lwFfojs0qZnD4jGA/zrDv6aQsspARghZnDdVp1ohHCUYjSP10oaoeXSLsi64+XxK 4aToQiCAjoXNxpUIttdslYTsmvjEHxdzYtasiTBqoBX+nHfe4ECYEBcuKYLz3YBIdsyxW7LGeEz A68KJyTluRIcXjXRlSr7PvLvvrDdZcUefooOE2vM4yCbvjz4zA4MjaFwdMeAIJhvYVWiN5Rij31 SE51uDLU3ihrJOakMY4Oa5W5B6dB1mDix0WS2izZoce3GuHkwxJrpNgLvum7Buw= X-Google-Smtp-Source: AGHT+IEOR8SkYAUNB17u62ljjwaf2hFD6D0NrcmHhlERldyKjuA2Rr70AEoQme8oc1Ybx9thwa9WTg== X-Received: by 2002:a17:902:f646:b0:210:fce4:11ec with SMTP id d9443c01a7336-226497ffb08mr9977165ad.1.1742343346457; Tue, 18 Mar 2025 17:15:46 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:46 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 06/10] fs: Extend do_sendfile to take a flags argument Date: Wed, 19 Mar 2025 00:15:17 +0000 Message-ID: <20250319001521.53249-7-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> 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" Extend the internal do_sendfile to take a flags argument, which will be used in future commits to signal that userland wants zerocopy notifications. This commit does not change anything about sendfile or sendfile64. Signed-off-by: Joe Damato --- fs/read_write.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/fs/read_write.c b/fs/read_write.c index a6133241dfb8..03d2a93c3d1b 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -1293,7 +1293,7 @@ COMPAT_SYSCALL_DEFINE6(pwritev2, compat_ulong_t, fd, #endif /* CONFIG_COMPAT */ =20 static ssize_t do_sendfile(int out_fd, int in_fd, loff_t *ppos, - size_t count, loff_t max) + size_t count, loff_t max, int flags) { struct inode *in_inode, *out_inode; struct pipe_inode_info *opipe; @@ -1398,13 +1398,13 @@ SYSCALL_DEFINE4(sendfile, int, out_fd, int, in_fd, = off_t __user *, offset, size_ if (unlikely(get_user(off, offset))) return -EFAULT; pos =3D off; - ret =3D do_sendfile(out_fd, in_fd, &pos, count, MAX_NON_LFS); + ret =3D do_sendfile(out_fd, in_fd, &pos, count, MAX_NON_LFS, 0); if (unlikely(put_user(pos, offset))) return -EFAULT; return ret; } =20 - return do_sendfile(out_fd, in_fd, NULL, count, 0); + return do_sendfile(out_fd, in_fd, NULL, count, 0, 0); } =20 SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd, loff_t __user *, offs= et, size_t, count) @@ -1415,13 +1415,13 @@ SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd= , loff_t __user *, offset, si if (offset) { if (unlikely(copy_from_user(&pos, offset, sizeof(loff_t)))) return -EFAULT; - ret =3D do_sendfile(out_fd, in_fd, &pos, count, 0); + ret =3D do_sendfile(out_fd, in_fd, &pos, count, 0, 0); if (unlikely(put_user(pos, offset))) return -EFAULT; return ret; } =20 - return do_sendfile(out_fd, in_fd, NULL, count, 0); + return do_sendfile(out_fd, in_fd, NULL, count, 0, 0); } =20 #ifdef CONFIG_COMPAT @@ -1436,13 +1436,13 @@ COMPAT_SYSCALL_DEFINE4(sendfile, int, out_fd, int, = in_fd, if (unlikely(get_user(off, offset))) return -EFAULT; pos =3D off; - ret =3D do_sendfile(out_fd, in_fd, &pos, count, MAX_NON_LFS); + ret =3D do_sendfile(out_fd, in_fd, &pos, count, MAX_NON_LFS, 0); if (unlikely(put_user(pos, offset))) return -EFAULT; return ret; } =20 - return do_sendfile(out_fd, in_fd, NULL, count, 0); + return do_sendfile(out_fd, in_fd, NULL, count, 0, 0); } =20 COMPAT_SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd, @@ -1454,13 +1454,13 @@ COMPAT_SYSCALL_DEFINE4(sendfile64, int, out_fd, int= , in_fd, if (offset) { if (unlikely(copy_from_user(&pos, offset, sizeof(loff_t)))) return -EFAULT; - ret =3D do_sendfile(out_fd, in_fd, &pos, count, 0); + ret =3D do_sendfile(out_fd, in_fd, &pos, count, 0, 0); if (unlikely(put_user(pos, offset))) return -EFAULT; return ret; } =20 - return do_sendfile(out_fd, in_fd, NULL, count, 0); + return do_sendfile(out_fd, in_fd, NULL, count, 0, 0); } #endif =20 --=20 2.43.0 From nobody Wed Dec 17 08:57:58 2025 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 C91E21B3955 for ; Wed, 19 Mar 2025 00:15:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343350; cv=none; b=HNQWBJ1MgBPnd07oZBR7/okls4GmwN9/SD586zW9n8cBs00W89D7RYu6sH/gZIN6RFkix3mfNORQ4gGJKUN72GzooE/YtrDOV6mEs+rBFRTQdlGryVePUgfawkIJjOvOMUjhxLYgKuTSsjvNPHb+EGCKAcSWkCZP07PVlP5s+74= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343350; c=relaxed/simple; bh=vqb5bSp3KtgrIHH2C10i+ZCVORS25O8aQdSoxaGrdX4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=N+QhHAJMcaUN0aAjfEvATAN1HC+UNFS4di7zPbwOAIz0ESlTKt5ofm02RgUR/G8jzRmZdQbL/dhbx2bOmzsD6oI1lGGIlQYkNkFgTw9pzRnj0grIiFsoAVBmVpY6VkWfKdPMwnbQSV5kW+QT55YRGWSM7RfdL+CwnLQQeY5E6ww= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=LdwLkSF8; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="LdwLkSF8" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2254e0b4b79so19026685ad.2 for ; Tue, 18 Mar 2025 17:15:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343348; x=1742948148; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2XqGZqCGsxMqM6QeHlFNqgLyn7L0jWSrp5tLsnvgx2I=; b=LdwLkSF8TBzC36dt6CntOhHl+LeUMOlyXozok9/QMwsLzJCbZQtUiV5ZsMTPkYtqcJ 4vcWfNjrYyGyxoOe5/0cRUNiClXg+CCpU+5N+tyoxTI6DfO2pupR5WhY5mA3NEiF58ul 8MrOhgdbfV7a7Eii7fwAIIFWtUdit226D4msI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343348; x=1742948148; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2XqGZqCGsxMqM6QeHlFNqgLyn7L0jWSrp5tLsnvgx2I=; b=tfErBPZOmDQjW02NHaV0+FOJDu+vTZ7Ydt7cIwgo33oqJ4deGHPaXO1pS8heFtETnG McUXQtUHvd4heSWrxhX3HKEiGpOoWJiqPdYYNkIZyM1fMNrkQ3+I9tbuOMGDyNqzgHgZ 0jdXDhAizbaLaZrhr3ocxrSMGSqz+YKWNZtKp6+fPqZSMU9qcaLDcSBeKRJt/3J0fQLB 2jsyW6VWixmW0N/m9fsEODrrqYKHDeyUak/RdiFGk1FWYqpPzbDO/1S7IIDKeaVNgzCI FJuMZDPJT8SKzgIgRPf9l8HeVySRTVbgwd7bjNSck5eshUuYUvEoNaJmsf720kHUB30Y yAqA== X-Gm-Message-State: AOJu0Yw+JHk4jI+E1s1mJuGwlDxOTcbBae/kcERDEqsOUSmd6tgWmNxN fK7TKP+37xIsGMNmgFeQA5jwkZVFgj8/jM9r0SfRRS+LQA1JvvLVuJt+sHqwpVM= X-Gm-Gg: ASbGnctRQjvB6RSGG6BhTn+9neduQzRS4N8rrHkfZSCyJIkYBD3ALqYfV0qrlMEyCs3 Gsozt+CtWqS/lNx08AMog6pFlK3+XMcHXAL8V4VPzfR4b6z31jmrHKWPGgWSqdGNSEs1Z1nHpUc kXdgA7rtBDFkiPjaN5kmc0S0G6wQZcmRIcL+S3VZ+L1+qo3hiuGyPUTdEt7MnJjDfw9jVNtvetg bpoFhab5BVs8xG5uIlO3vTugoRwUTyKmHCN75jM7c25RSQeQCg/VPH2DMMturnAYs2+T6v9Sjut Xwb1Z92i9Hmpl0aF1xsg7muBF0bHQPsmzDgXHr/5yki0yecHpP7O X-Google-Smtp-Source: AGHT+IEmJYpbp+6vVhqsiGvsZq35cbhyVslRXzs04bm/SNmdXK2RzQx72NbvXgQ96Ga+Vw4Kk+NJMQ== X-Received: by 2002:a17:903:22cd:b0:223:58ea:6fdf with SMTP id d9443c01a7336-22649a3c6a7mr8745335ad.28.1742343348190; Tue, 18 Mar 2025 17:15:48 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:47 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 07/10] fs: Add sendfile2 which accepts a flags argument Date: Wed, 19 Mar 2025 00:15:18 +0000 Message-ID: <20250319001521.53249-8-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> 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" Add sendfile2 which is similar to sendfile64, but takes a flags argument. Signed-off-by: Joe Damato --- fs/read_write.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/fs/read_write.c b/fs/read_write.c index 03d2a93c3d1b..057e5f37645d 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -1424,6 +1424,23 @@ SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd,= loff_t __user *, offset, si return do_sendfile(out_fd, in_fd, NULL, count, 0, 0); } =20 +SYSCALL_DEFINE5(sendfile2, int, out_fd, int, in_fd, loff_t __user *, offse= t, size_t, count, int, flags) +{ + loff_t pos; + ssize_t ret; + + if (offset) { + if (unlikely(copy_from_user(&pos, offset, sizeof(loff_t)))) + return -EFAULT; + ret =3D do_sendfile(out_fd, in_fd, &pos, count, 0, flags); + if (unlikely(put_user(pos, offset))) + return -EFAULT; + return ret; + } + + return do_sendfile(out_fd, in_fd, NULL, count, 0, flags); +} + #ifdef CONFIG_COMPAT COMPAT_SYSCALL_DEFINE4(sendfile, int, out_fd, int, in_fd, compat_off_t __user *, offset, compat_size_t, count) --=20 2.43.0 From nobody Wed Dec 17 08:57:58 2025 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (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 9A71E1BEF7E for ; Wed, 19 Mar 2025 00:15:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343352; cv=none; b=ZM+nJADYDTfW57E3IJHqnQr3uNHiG30ICKed9DgnqaVoNyEhsYm7xbieY46c1b0wJFBs1EZBfzdperrR7OXZD0ISe9rCsYZ1R5zQuFUPsL3KTwyJJTY6NdwHKBRR4h/0wGVuuXLd/eLtUkCdrgSjqCiIA5GI6JQZk3DqmsosRUk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343352; c=relaxed/simple; bh=vfmaI48yQu2LzbBRsfUKYj71ya/2pybugWom3+MlAb0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=moERBfz5N+JGJb26OoqKZXgEkmdqKM6K4fyWV3hYULs3KiT9G7IcmoWb5/rXBWCOUzNPQhBeTZuvqhU0bDqZ6EQbO/s2aSaVkjg8/dB5AmEP4YiQTbvmYRFunyR+eMYOjausdlNfSbdLpowl+uGwfyV15SZy4SbvJ5kbHuq0L0U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=Fgfu4GvO; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="Fgfu4GvO" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-22359001f1aso7642585ad.3 for ; Tue, 18 Mar 2025 17:15:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343350; x=1742948150; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=m2h8ahGEK8NaWNEbWiVu/ZrnscNwqcwDayJj5C9lFzM=; b=Fgfu4GvOW7stKhQu5e7z9IC/Nv0oQmJEqDAVI/BLiHzM8QdXiSjIqaUlpvskDPWngk M4Hhz1GrWXmXi+HYbhJImPSMiUnprJifoEwOxFpvOZAdYtnHrcj830d1SNiEyFw5h2uP z0OEH0Ld/35wCgYMxFW3HKiDEMZ3tg9kH47Qc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343350; x=1742948150; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=m2h8ahGEK8NaWNEbWiVu/ZrnscNwqcwDayJj5C9lFzM=; b=k8E+09A/lRnnMuky8PF1sS6GIgt68E9dZe8Ici1f/hrBjQUuLZxyijkYfHd9nBBQ0R DWtmittS1C32N4ohBYztXhvkjFH3iZ+gTMtK/dVr/gwiq7NPkxg9kkrkNNgJesSpGGAg pXsseFZOsZTVry4Wp1ysBDFGNXb7rEiYKT6Eu9fpHkY5D+HErxRwtuoFgnrS8GXs7qI7 NkiDOb//SqhhNLM4w4XrBrHYjjIzNGWfMmBxK3vhYKx1Xqq6HtP6OqA9WzItY+NPR7Oz zxQHM+HJnmknNAzklc8Y7ZR1gjXrs3z+Y45al4zaUrjSOpo2FujTQc5ESQFG/BkHas7D 0ysA== X-Gm-Message-State: AOJu0YxaSyPzPvIsWuS6lmdPCx3HpcAZHT6Yu52L/nVV0HZAmVCKfF0U LYlFIbMc9xw2/6E9/6pid13f1jMzaticZl6Oz2TSnujdxKnvDUdueL/aL729V7c= X-Gm-Gg: ASbGncvr//GRJZvGTVUAbrL7+1L7+PwMBG+33f8DG7lrBwA37OpqVPKpjwe/HHk2VcO oYA/exnnMBuXRDi238oQytZ/CibglevNIF2xWAhoMEUu71sLHinXsCR7bw+MnwhR2pkVJGE7ELp 1IKyvGJghbYCuJSMsVyo1J5ARW8OC81dsJ+ugeEV0Tz9NFJiIIxoCR+lsW7ePzFzYhV4UopCKQI jUxuDWZZVL8spVIS7hK4Q+0gTLDC1gkWBeplfRPTxh3K3kGGWYZDOBmTeSNkzVOhSPJ5KzohovF oPnP4nPBYRycOjNOnrjAzGRoO082C6aEm1o47qRYsx0ykjb7kVeJ X-Google-Smtp-Source: AGHT+IGTEGf1f8q+q48T1ikUY+fDbR7xEVmvuzHJIMrxwMpGrnPzwUvPjVZv+TsZZ6BX0OHQ1CwSDw== X-Received: by 2002:a17:903:22c4:b0:220:faa2:c911 with SMTP id d9443c01a7336-2264992ff63mr9690915ad.14.1742343349888; Tue, 18 Mar 2025 17:15:49 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:49 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 08/10] fs: Add sendfile flags for sendfile2 Date: Wed, 19 Mar 2025 00:15:19 +0000 Message-ID: <20250319001521.53249-9-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> 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" Add a default flag (SENDFILE_DEFAULT) and a flag for requesting zerocopy notifications (SENDFILE_ZC). do_sendfile is updated to pass through the corresponding splice flag to enable zerocopy notifications. Signed-off-by: Joe Damato --- fs/read_write.c | 5 +++++ include/linux/sendfile.h | 10 ++++++++++ 2 files changed, 15 insertions(+) create mode 100644 include/linux/sendfile.h diff --git a/fs/read_write.c b/fs/read_write.c index 057e5f37645d..e3929fd0f605 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -1360,6 +1361,10 @@ static ssize_t do_sendfile(int out_fd, int in_fd, lo= ff_t *ppos, retval =3D rw_verify_area(WRITE, fd_file(out), &out_pos, count); if (retval < 0) return retval; + + if (flags & SENDFILE_ZC) + fl |=3D SPLICE_F_ZC; + retval =3D do_splice_direct(fd_file(in), &pos, fd_file(out), &out_pos, count, fl); } else { diff --git a/include/linux/sendfile.h b/include/linux/sendfile.h new file mode 100644 index 000000000000..0bd3c76ea6f2 --- /dev/null +++ b/include/linux/sendfile.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef SENDFILE_H +#define SENDFILE_H + +#define SENDFILE_DEFAULT (0x1) /* normal sendfile */ +#define SENDFILE_ZC (0x2) /* sendfile which generates ZC notificatio= ns */ + +#define SENDFILE_ALL (SENDFILE_DEFAULT|SENDFILE_ZC) + +#endif --=20 2.43.0 From nobody Wed Dec 17 08:57:58 2025 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (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 5CBE51C6FE3 for ; Wed, 19 Mar 2025 00:15:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343354; cv=none; b=pYaeqVshUKCgEon/2A9qVeUAUFd+V0JgNm/n1LRn6vC8VPIADeAw7N7rdr41zSuJNILTFrf7uJODD65gAoWw7ah9q5rXOF4kM6PNWPJ4M6mwulRs/Sd2Uh7jhEEQaTgpu0CB/bTQbKm2T4EkQCOFLDhWu6IT5yiSO7NHGjveWxw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343354; c=relaxed/simple; bh=HrvGzL7SpIoKoXo8zFH3/CZ1R1e6uAmq2pNYC7W0pqc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=awFghX89h2AWmCGeAOK/lPh7FRSQtMjp6exXRA6AbV1JiNEe3VJK3tYl5kfT2DOqrjMiFCRyuYwf1D3vNZIL+JQoCisv++SZGY3HmRjS3tCI6Z8LbPtKRkdDJRAQPHfHmsu0tzySkmacuxbQ2jiZa8G2KWufuH05aVKc112pxnU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=m/qlmE01; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="m/qlmE01" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-225e3002dffso70234095ad.1 for ; Tue, 18 Mar 2025 17:15:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343352; x=1742948152; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZB6CanLMGY6mZXQkGX+cRiOusq9nkfF+ZzLXVJxU5Ns=; b=m/qlmE01QBk73ZOy9TB4yXQm4sUA0jAbyaT/jF8KepjyZbRTrU0uBgcxtOf6cVlu5c ANbs1eibefl9/qap2HWUJfRvQyAWAnUA2eygVhhEYk+N/f6lvrlN1EKxZvE1TQikOfW6 7i4/ftSypVjjHjHpcaCoIx6Qy13ufcEWt+RBQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343352; x=1742948152; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZB6CanLMGY6mZXQkGX+cRiOusq9nkfF+ZzLXVJxU5Ns=; b=Gy72+PMMk6jn0SKuYF4+riz95Qwe2vM6lqKPgovMHz2SjHB0OJHHfj6zSRkPRkmwbp xr2jaqeBXMw/JvMkfdkZDaH48mxwvUI1oCHq1KZXvpcC+1xY8CcykA0V/biBk//T9DxN ouyFJB98SSKT2GBUyFbTCZe7wij94W/eLhnKpBLEMlbRrzLmbu9kuyluQH6V/1m+Ouul xFSfB7xEtYP6nk3/bJxLT8TGb+GChPmstbWZaaA7rmCsCOQE7yOQtnDzPjGtgwrJNtpi RnYv9JZholWZkhwfTGNNPXVedsBzBKpOra8T4WF+/uT1jcDuzTPl49sBdjkbpIOSxQ7t caJA== X-Gm-Message-State: AOJu0Yx4JpD20dU43X5yuCYuSCjwcSM8SnM4LGp0VFR6IduNckUGyBmr YLKNNaBnRRmD87NmYBxAEap2LrA+wVVbWMqC4llC0ylaMShcKlkx2adCBHlmBlA= X-Gm-Gg: ASbGncuUp7ekxZet+c22FFJCeuBCECTrTWS+tO4Yk2gDt/i6AhX7yMjMReF+RPJL1Zy 9i9WJ/0UDdZCW3Hj8UWYfplZT2qREb0ubXsNgxFgY0/2cyw66nKxxMxA9R4SIYiwOm2bK2tkmn8 GT3IUU25ybnTPoNwJMz0KS67HoNH8chlswn1xKsgAjrS1lUyGUC+iUWDUu+Ej1ZUcN/G8pJqrAe /zt4ngpphPFHYZgIaRMwr/rsxSg6ChPEHuntBA6bc3msb37Pbzzg2/ABy41tekNQ8qH+/MUERVm ovx6UqJ64lDWYXhASkjGtTCj15E0By5UHFN8JMFkeQpxDICLx2Va X-Google-Smtp-Source: AGHT+IGEjgNr8OXukMKpiMZiFHzun0R5NaGz3kNl/a4hrPUj8a+pmGVK3Inx5pRS8JA4nLBMKEl0Gg== X-Received: by 2002:a17:902:db12:b0:223:49cb:5eaa with SMTP id d9443c01a7336-22649a46a18mr10979595ad.35.1742343351630; Tue, 18 Mar 2025 17:15:51 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:51 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 09/10] fs: Add sendfile2 syscall Date: Wed, 19 Mar 2025 00:15:20 +0000 Message-ID: <20250319001521.53249-10-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> 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" The sendfile2 system call is similar to sendfile64, but takes a flags argument allowing the user to select either a default sendfile or for sendfile to generate zerocopy notifications similar to MSG_ZEROCOPY and sendmsg. Signed-off-by: Joe Damato --- arch/alpha/kernel/syscalls/syscall.tbl | 1 + arch/arm/tools/syscall.tbl | 1 + arch/arm64/tools/syscall_32.tbl | 1 + arch/m68k/kernel/syscalls/syscall.tbl | 1 + arch/microblaze/kernel/syscalls/syscall.tbl | 1 + arch/mips/kernel/syscalls/syscall_n32.tbl | 1 + arch/mips/kernel/syscalls/syscall_n64.tbl | 1 + arch/mips/kernel/syscalls/syscall_o32.tbl | 1 + arch/parisc/kernel/syscalls/syscall.tbl | 1 + arch/powerpc/kernel/syscalls/syscall.tbl | 1 + arch/s390/kernel/syscalls/syscall.tbl | 1 + arch/sh/kernel/syscalls/syscall.tbl | 1 + arch/sparc/kernel/syscalls/syscall.tbl | 1 + arch/x86/entry/syscalls/syscall_32.tbl | 1 + arch/x86/entry/syscalls/syscall_64.tbl | 1 + arch/xtensa/kernel/syscalls/syscall.tbl | 1 + include/linux/syscalls.h | 2 ++ include/uapi/asm-generic/unistd.h | 4 +++- scripts/syscall.tbl | 1 + 19 files changed, 22 insertions(+), 1 deletion(-) diff --git a/arch/alpha/kernel/syscalls/syscall.tbl b/arch/alpha/kernel/sys= calls/syscall.tbl index c59d53d6d3f3..124313c745b6 100644 --- a/arch/alpha/kernel/syscalls/syscall.tbl +++ b/arch/alpha/kernel/syscalls/syscall.tbl @@ -506,3 +506,4 @@ 574 common getxattrat sys_getxattrat 575 common listxattrat sys_listxattrat 576 common removexattrat sys_removexattrat +577 common sendfile2 sys_sendfile2 diff --git a/arch/arm/tools/syscall.tbl b/arch/arm/tools/syscall.tbl index 49eeb2ad8dbd..ca61b5792148 100644 --- a/arch/arm/tools/syscall.tbl +++ b/arch/arm/tools/syscall.tbl @@ -481,3 +481,4 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 diff --git a/arch/arm64/tools/syscall_32.tbl b/arch/arm64/tools/syscall_32.= tbl index 69a829912a05..71695a61a1df 100644 --- a/arch/arm64/tools/syscall_32.tbl +++ b/arch/arm64/tools/syscall_32.tbl @@ -478,3 +478,4 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 diff --git a/arch/m68k/kernel/syscalls/syscall.tbl b/arch/m68k/kernel/sysca= lls/syscall.tbl index f5ed71f1910d..6096a22b4472 100644 --- a/arch/m68k/kernel/syscalls/syscall.tbl +++ b/arch/m68k/kernel/syscalls/syscall.tbl @@ -466,3 +466,4 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 diff --git a/arch/microblaze/kernel/syscalls/syscall.tbl b/arch/microblaze/= kernel/syscalls/syscall.tbl index 680f568b77f2..0429dc26ceee 100644 --- a/arch/microblaze/kernel/syscalls/syscall.tbl +++ b/arch/microblaze/kernel/syscalls/syscall.tbl @@ -472,3 +472,4 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 diff --git a/arch/mips/kernel/syscalls/syscall_n32.tbl b/arch/mips/kernel/s= yscalls/syscall_n32.tbl index 0b9b7e25b69a..f6571c8ecb15 100644 --- a/arch/mips/kernel/syscalls/syscall_n32.tbl +++ b/arch/mips/kernel/syscalls/syscall_n32.tbl @@ -405,3 +405,4 @@ 464 n32 getxattrat sys_getxattrat 465 n32 listxattrat sys_listxattrat 466 n32 removexattrat sys_removexattrat +467 n32 sendfile2 sys_sendfile2 diff --git a/arch/mips/kernel/syscalls/syscall_n64.tbl b/arch/mips/kernel/s= yscalls/syscall_n64.tbl index c844cd5cda62..532ce99478ee 100644 --- a/arch/mips/kernel/syscalls/syscall_n64.tbl +++ b/arch/mips/kernel/syscalls/syscall_n64.tbl @@ -381,3 +381,4 @@ 464 n64 getxattrat sys_getxattrat 465 n64 listxattrat sys_listxattrat 466 n64 removexattrat sys_removexattrat +467 n64 sendfile2 sys_sendfile2 diff --git a/arch/mips/kernel/syscalls/syscall_o32.tbl b/arch/mips/kernel/s= yscalls/syscall_o32.tbl index 349b8aad1159..9cacbbff6b12 100644 --- a/arch/mips/kernel/syscalls/syscall_o32.tbl +++ b/arch/mips/kernel/syscalls/syscall_o32.tbl @@ -454,3 +454,4 @@ 464 o32 getxattrat sys_getxattrat 465 o32 listxattrat sys_listxattrat 466 o32 removexattrat sys_removexattrat +467 o32 sendfile2 sys_sendfile2 diff --git a/arch/parisc/kernel/syscalls/syscall.tbl b/arch/parisc/kernel/s= yscalls/syscall.tbl index d9fc94c86965..ca5a3e6eb8f3 100644 --- a/arch/parisc/kernel/syscalls/syscall.tbl +++ b/arch/parisc/kernel/syscalls/syscall.tbl @@ -465,3 +465,4 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 diff --git a/arch/powerpc/kernel/syscalls/syscall.tbl b/arch/powerpc/kernel= /syscalls/syscall.tbl index d8b4ab78bef0..450392aed1eb 100644 --- a/arch/powerpc/kernel/syscalls/syscall.tbl +++ b/arch/powerpc/kernel/syscalls/syscall.tbl @@ -557,3 +557,4 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 diff --git a/arch/s390/kernel/syscalls/syscall.tbl b/arch/s390/kernel/sysca= lls/syscall.tbl index e9115b4d8b63..e7e1b16f4d39 100644 --- a/arch/s390/kernel/syscalls/syscall.tbl +++ b/arch/s390/kernel/syscalls/syscall.tbl @@ -469,3 +469,4 @@ 464 common getxattrat sys_getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat sys_removexattrat +467 64 sendfile2 sys_sendfile2 - diff --git a/arch/sh/kernel/syscalls/syscall.tbl b/arch/sh/kernel/syscalls/= syscall.tbl index c8cad33bf250..c75a0e69c033 100644 --- a/arch/sh/kernel/syscalls/syscall.tbl +++ b/arch/sh/kernel/syscalls/syscall.tbl @@ -470,3 +470,4 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 diff --git a/arch/sparc/kernel/syscalls/syscall.tbl b/arch/sparc/kernel/sys= calls/syscall.tbl index 727f99d333b3..fd15465b5330 100644 --- a/arch/sparc/kernel/syscalls/syscall.tbl +++ b/arch/sparc/kernel/syscalls/syscall.tbl @@ -512,3 +512,4 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscal= ls/syscall_32.tbl index 4d0fb2fba7e2..f711ee6068ec 100644 --- a/arch/x86/entry/syscalls/syscall_32.tbl +++ b/arch/x86/entry/syscalls/syscall_32.tbl @@ -472,3 +472,4 @@ 464 i386 getxattrat sys_getxattrat 465 i386 listxattrat sys_listxattrat 466 i386 removexattrat sys_removexattrat +467 i386 sendfile2 sys_sendfile2 diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscal= ls/syscall_64.tbl index 5eb708bff1c7..0ba4edb1e4c0 100644 --- a/arch/x86/entry/syscalls/syscall_64.tbl +++ b/arch/x86/entry/syscalls/syscall_64.tbl @@ -390,6 +390,7 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 =20 # # Due to a historical design error, certain syscalls are numbered differen= tly diff --git a/arch/xtensa/kernel/syscalls/syscall.tbl b/arch/xtensa/kernel/s= yscalls/syscall.tbl index 37effc1b134e..142597c92baf 100644 --- a/arch/xtensa/kernel/syscalls/syscall.tbl +++ b/arch/xtensa/kernel/syscalls/syscall.tbl @@ -437,3 +437,4 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index c6333204d451..3ee0e997d6c6 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -491,6 +491,8 @@ asmlinkage long sys_pwritev(unsigned long fd, const str= uct iovec __user *vec, unsigned long vlen, unsigned long pos_l, unsigned long pos_h); asmlinkage long sys_sendfile64(int out_fd, int in_fd, loff_t __user *offset, size_t count); +asmlinkage long sys_sendfile2(int out_fd, int in_fd, + loff_t __user *offset, size_t count, int flags); asmlinkage long sys_pselect6(int, fd_set __user *, fd_set __user *, fd_set __user *, struct __kernel_timespec __user *, void __user *); diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/u= nistd.h index 88dc393c2bca..ec0ac5a8d519 100644 --- a/include/uapi/asm-generic/unistd.h +++ b/include/uapi/asm-generic/unistd.h @@ -849,9 +849,11 @@ __SYSCALL(__NR_getxattrat, sys_getxattrat) __SYSCALL(__NR_listxattrat, sys_listxattrat) #define __NR_removexattrat 466 __SYSCALL(__NR_removexattrat, sys_removexattrat) +#define __NR_sendfile2 467 +__SYSCALL(__NR_sendfile2, sys_sendfile2) =20 #undef __NR_syscalls -#define __NR_syscalls 467 +#define __NR_syscalls 468 =20 /* * 32 bit systems traditionally used different diff --git a/scripts/syscall.tbl b/scripts/syscall.tbl index ebbdb3c42e9f..1911a64d3b33 100644 --- a/scripts/syscall.tbl +++ b/scripts/syscall.tbl @@ -407,3 +407,4 @@ 464 common getxattrat sys_getxattrat 465 common listxattrat sys_listxattrat 466 common removexattrat sys_removexattrat +467 common sendfile2 sys_sendfile2 --=20 2.43.0 From nobody Wed Dec 17 08:57:58 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 E4B141CD208 for ; Wed, 19 Mar 2025 00:15:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343355; cv=none; b=Ol3lFSbD+AY0WJ3fUyja9BOGBLdcRuzyA81i2LIBVmn/nJWGJurRowfk7t7APew3iOJTmUzEb9cwDm6eBH82uYfbRen06GZuB/TrjHDS2AUMueOl6k9BpW1iHCKFQsKTEaqWeY+y9awdl6DFhDRHSk6QjLGMjWj4vtJ8k5iBWIA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343355; c=relaxed/simple; bh=l6eI5FceV5Cykwuzpt3OkcP+LeKArrcDOklFOAM4Tzc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d/J7DIu0HxkZb3ZGngLNslAZavYMIit8JiKLzs089kiJ62+0MVUytQQqPSTWG3OeBy9I6ihs34uTi71YK8Y92VwfIfEtbD3uWIba9mDn6Zx1jlEhdqlpKhlSzjAjEFWpFU0KsD24kGGuLeAnKloaHHD3D8b4lLHNLAfTY1KCm50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com; spf=pass smtp.mailfrom=fastly.com; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b=vYT0YI/q; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=fastly.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fastly.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=fastly.com header.i=@fastly.com header.b="vYT0YI/q" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-22435603572so102465425ad.1 for ; Tue, 18 Mar 2025 17:15:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1742343353; x=1742948153; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GCjuaqhwOiDHFc+loZsxbFlVswHaNNd+fRkOYDgDDk0=; b=vYT0YI/qIAMQv3nwASjjKB0WzkosloZq27M6ZaOiU5+It2z5k7Ckq1fd8arWHQ05i3 wxR1l1GQrwWKjpIlNNTBNYB2rEzDuaQJgbUfW/2mHQsbksSmYmMTVPYFOmI7E5UQKA1C xYAsqpUnAZ9BU3ZJQJTRdY0g5RYiuHIfb6Iqo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742343353; x=1742948153; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GCjuaqhwOiDHFc+loZsxbFlVswHaNNd+fRkOYDgDDk0=; b=oxfDAtLR0qUIuwyoZDaHtnPC5ufSVLq8NouMwutmhUfvMhaPwey2xc5kdsKF9KCRX7 4ng5LzsluW7apxZzS2r7n0lOKce0sRzjbavM5PKzLiJzOGm2Tqlhpx1aDfcNTNaS9MNG v5P1mc+VyZsSq3TlFdAMNR+GD2IC2vqwG6pEZxkK1Qu/pt+pv1+0MMj1n4zgShSCPkG7 JGGT5uAv6RFylXLrIiscBqIRvK8O3rKI0H4l57ntCYFRShdZ/jitvD7Qwh7FRSfO2VlC uyjMMos3Gt8Qd6JlKDnZAHNd2gkeUeD5WqDK3xlBPLvQeHPyHDOMYb7BIg/+ypGHFTLu M1XQ== X-Gm-Message-State: AOJu0YyUXTWesNvGu2OL6y/Dxhvpbh1MGERKcujnDA/zIOM0OxXaOvTZ AGqf54LDBAzMceJE4noOwT+hkXX4IVbZx9velRFaKEWCEFb04I/nao9rnYo5BCc= X-Gm-Gg: ASbGncudwItsUrtaxWmdJ9hnY2znuw7Our5+3F3cOY0JjBodP7h/8iIpnPhpzicYK1+ h3f4JnmXd1E5+Liebe9OdldkDEZDSUdggnUJy4iCk+ow/NFaDgOfzS4K6FztJ8XK0Eu4FRohU+X ouK/CWqOd1Kry91GCUkk69akevIi3iB+GAIeDWPzw5TyJHsrqnfacXLN50uzT67pwHQS++XrQev RWdmtm305+KLqL2TtiNRK0pH/LLDnMQpmJK0fnUlyEBUeP4392E92CxeVUc2VxyKN4h5IvcEJiI /e+XMwc9cRRF/f1rhxDJS7ikejTJVQgOoyBf6QckON/JL4/Wcc4KMxaiqpHP2to= X-Google-Smtp-Source: AGHT+IGyJJUfiVi7domxxVJWnLd5oPGvI2NnmEftJelHGqwd1vZMeJiUnL793ZEEGGeMZjX9WP3DFw== X-Received: by 2002:a17:902:f60d:b0:223:3b76:4e22 with SMTP id d9443c01a7336-2264980c773mr9656025ad.6.1742343353358; Tue, 18 Mar 2025 17:15:53 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a4876sm101281375ad.70.2025.03.18.17.15.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Mar 2025 17:15:52 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, horms@kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, kuba@kernel.org, shuah@kernel.org, sdf@fomichev.me, mingo@redhat.com, arnd@arndb.de, brauner@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, jolsa@kernel.org, linux-kselftest@vger.kernel.org, Joe Damato Subject: [RFC -next 10/10] selftests: Add sendfile zerocopy notification test Date: Wed, 19 Mar 2025 00:15:21 +0000 Message-ID: <20250319001521.53249-11-jdamato@fastly.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319001521.53249-1-jdamato@fastly.com> References: <20250319001521.53249-1-jdamato@fastly.com> 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" Extend the existing the msg_zerocopy test to allow testing sendfile to ensure that notifications are generated. Signed-off-by: Joe Damato --- tools/testing/selftests/net/msg_zerocopy.c | 54 ++++++++++++++++++++- tools/testing/selftests/net/msg_zerocopy.sh | 5 ++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/net/msg_zerocopy.c b/tools/testing/sel= ftests/net/msg_zerocopy.c index 7ea5fb28c93d..20e334b25fbd 100644 --- a/tools/testing/selftests/net/msg_zerocopy.c +++ b/tools/testing/selftests/net/msg_zerocopy.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -50,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -74,6 +76,14 @@ #define MSG_ZEROCOPY 0x4000000 #endif =20 +#ifndef SENDFILE_ZC +#define SENDFILE_ZC (0x2) +#endif + +#ifndef __NR_sendfile2 +#define __NR_sendfile2 467 +#endif + static int cfg_cork; static bool cfg_cork_mixed; static int cfg_cpu =3D -1; /* default: pin to last cpu */ @@ -87,6 +97,8 @@ static int cfg_verbose; static int cfg_waittime_ms =3D 500; static int cfg_notification_limit =3D 32; static bool cfg_zerocopy; +static bool cfg_sendfile; +static const char *cfg_sendfile_path; =20 static socklen_t cfg_alen; static struct sockaddr_storage cfg_dst_addr; @@ -182,6 +194,37 @@ static void add_zcopy_cookie(struct msghdr *msg, uint3= 2_t cookie) memcpy(CMSG_DATA(cm), &cookie, sizeof(cookie)); } =20 +static bool do_sendfile(int fd) +{ + int from_fd =3D open(cfg_sendfile_path, O_RDONLY, 0); + struct stat buf; + ssize_t total =3D 0; + ssize_t ret =3D 0; + off_t off =3D 0; + + if (fd < 0) + error(1, errno, "couldn't open sendfile path"); + + if (fstat(from_fd, &buf)) + error(1, errno, "couldn't fstat"); + + while (total < buf.st_size) { + ret =3D syscall(__NR_sendfile2, fd, from_fd, &off, buf.st_size, + SENDFILE_ZC); + if (ret < 0) + error(1, errno, "unable to sendfile"); + total +=3D ret; + sends_since_notify++; + bytes +=3D ret; + packets++; + if (ret > 0) + expected_completions++; + } + + close(from_fd); + return total =3D=3D buf.st_size; +} + static bool do_sendmsg(int fd, struct msghdr *msg, bool do_zerocopy, int d= omain) { int ret, len, i, flags; @@ -550,6 +593,8 @@ static void do_tx(int domain, int type, int protocol) do { if (cfg_cork) do_sendmsg_corked(fd, &msg); + else if (cfg_sendfile) + do_sendfile(fd); else do_sendmsg(fd, &msg, cfg_zerocopy, domain); =20 @@ -715,7 +760,7 @@ static void parse_opts(int argc, char **argv) =20 cfg_payload_len =3D max_payload_len; =20 - while ((c =3D getopt(argc, argv, "46c:C:D:i:l:mp:rs:S:t:vz")) !=3D -1) { + while ((c =3D getopt(argc, argv, "46c:C:D:i:l:mp:rs:S:t:vzf:w:")) !=3D -1= ) { switch (c) { case '4': if (cfg_family !=3D PF_UNSPEC) @@ -767,9 +812,16 @@ static void parse_opts(int argc, char **argv) case 'v': cfg_verbose++; break; + case 'f': + cfg_sendfile =3D true; + cfg_sendfile_path =3D optarg; + break; case 'z': cfg_zerocopy =3D true; break; + case 'w': + cfg_waittime_ms =3D 200 + strtoul(optarg, NULL, 10) * 1000; + break; } } =20 diff --git a/tools/testing/selftests/net/msg_zerocopy.sh b/tools/testing/se= lftests/net/msg_zerocopy.sh index 89c22f5320e0..c735e4ab86b5 100755 --- a/tools/testing/selftests/net/msg_zerocopy.sh +++ b/tools/testing/selftests/net/msg_zerocopy.sh @@ -74,6 +74,7 @@ esac cleanup() { ip netns del "${NS2}" ip netns del "${NS1}" + rm -f sendfile_data } =20 trap cleanup EXIT @@ -106,6 +107,9 @@ ip -netns "${NS2}" addr add fd::2/64 dev "${DEV}"= nodad # Optionally disable sg or csum offload to test edge cases # ip netns exec "${NS1}" ethtool -K "${DEV}" sg off =20 +# create sendfile test data +dd if=3D/dev/zero of=3Dsendfile_data bs=3D1M count=3D8 2> /dev/null + do_test() { local readonly ARGS=3D"$1" =20 @@ -118,4 +122,5 @@ do_test() { =20 do_test "${EXTRA_ARGS}" do_test "-z ${EXTRA_ARGS}" +do_test "-z -f sendfile_data ${EXTRA_ARGS}" echo ok --=20 2.43.0