From patchwork Wed Mar 19 00:15:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 14021773 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) (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 9D715134BD for ; Wed, 19 Mar 2025 00:15:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343340; cv=none; b=Q+XQaeuaxeImQP0pAot9XmskcPF5wrXy7aQex834nMcbG4hhd6KwDm3b3B2oDDWKpdVY3gqiC6H0ypDSDike7tKRpKe2mIcrHByks3M8noBh61T7/fWx6xluk8B+yTflRNc2d+wyS/94vq0Qd5ELnKXdh3isrVywFR5XtfPM/JE= 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.45 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-f45.google.com with SMTP id 98e67ed59e1d1-300fefb8e06so7127277a91.0 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=igMPVqcqtXevs1Hx6qtFgpeousxr1V/jgwo3n9niFtT7qAAWV4uGhlnuCZ8bYzXM7j L6meuGJbId9+ZGv/OEoa2Yyt95vAJ1DDRJosmxoL3Cr2YhBi/1e4AoHPBDn7qZeycdrO 7/AApoDfLUaIQS452JrESbGGJ/nSYhacBz83UIqHnACnvclPu3VRx+xkpHq56CtGxlTQ WKMytA0CjEgtK2i21RXotPpr76pJ5yhDPShyWBnsdFTept78NfDGhV48dbXAoXwbusSP OkyijrvP+6CyQeLXv3qH1FH4fyt53W5p35U9zBDYz4+Xzb4TWaDxulcYo/jXQ3sHeWE5 mqdg== X-Forwarded-Encrypted: i=1; AJvYcCV1FMWd4sz81h2vsK0qJ/yTx9gRz1Nmi71SrPHRP7inlstVYWbcgZbG6m2M4yTUsnfMb18KUMKXFw9nH4Rx@vger.kernel.org X-Gm-Message-State: AOJu0Yw4wyZiVfE2vPo5Z2ICkkoQBuwl17uihi0HckhK/DQ4uDJ0hrko eyXvfRx65B9/7+m4N7bjzfpL9VzANdFJUjJ/oUfXEZHiwaw820xmPEH4fLUQcqI= X-Gm-Gg: ASbGncvRDVFlpIf/tTXvh0NlL8x63blYaZgs8ahga+Gvf7W+g8MyNu6oCgbNIhuK9m3 CAEXrWhSyms3Q18g8vNnCt/h8e0vigkpUtQt/TETdmLjDvjkO6eo5ppUNQIQkK4A+2UFPBuUvGr mBAQqrxB6M5c0+f4MxT/SeF6BQrv3e9xz9Xk7baDXlNBX0EYQoxLpr3ifRm5sC2PqoRHAMBLbvD LLlE+TaD+EzkcS6bVC4CgB+o83ULPeyzZfA166xNujgDyPca5UxnmqvO9c9DGZksHG6cwrkyziX ipY3T07NGyfPkFx4MMiyuK3fWnLI91I3yHvUSdLX8Gqj5hkm/Tq98rM7yVsZekA= 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-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 #include +#include /* * 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 */ }; struct partial_page { From patchwork Wed Mar 19 00:15:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 14021774 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 3CD9B3594A for ; Wed, 19 Mar 2025 00:15:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343341; cv=none; b=QM2w4Ull6QyUBpHpqra5nI0VAnp/MOdqSjupsRMELyU25058EJhN8kwIRpVOTwSORjAo8lIbQbn4n8AxyFc4aRdBtLUu3pNOtVNwHnbd2KlB7O0FgtPX7Z5uGEZW7n2s2PcZkt8V3K54t/fHLhnxGDm4vB4SitNuIniDu4S8YyI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343341; c=relaxed/simple; bh=zDwqRePv1ZFUDi9FjMPQDVKfJ1n1RRe7hhmBOVzyCME=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AV3s3QOefeSE+8W9+UIF4LksIGAbyQdsE4QR/NcnKB/eNWUCwDyO0XQWVUyVyFyx79ERaDvgX5vKTiTQ7IYcy5zgcLNFgbwftKw/DMVRPILepYA9pLBIMcZho9M6kaZ1TzYbwpQgu+1ihvzjO86wKC8yObvcH9IWPJORoEAuhdM= 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.52 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-f52.google.com with SMTP id 98e67ed59e1d1-2ff6e91cff5so6065561a91.2 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=VLH3JotWfp//j100azSgLQNMbrHQNmcEl39qRbV/ZhDoUeWst2zCSS3dSL6G8O4c5Q XR349PVp7M4+i2/tCocggl7wQN9jpIWxg29v4N2+njVgeq2hDqhT5KvgAL3w+2GCHibt PcqtBdGgSjtjMErkQIQqf5kkCYV81fyUaA5t+K4MRf/CUhYaAgF0ZFQP/kL/RWWV5PiY Gx16xclZIJ6s7FLnZ03dLPqSrOVxFIrbigYX0k4p/5/qy7tx8nsEV2MqBBJQs8OEz456 sH7Wrxce0Nuae9zz1QFXm4KZn3fCPdHV6RJB9N5Tg88wtNYj9E77GRQcPRRcKnTLSocb TRSg== X-Forwarded-Encrypted: i=1; AJvYcCW2anohdElNfYmmbHJbEIxsh4prdcQ8d9atbq1tDXrA2VWqRKmAlbwchtrncSYNFEs8eplS+ooHUwDsUzVn@vger.kernel.org X-Gm-Message-State: AOJu0YxYLf63ic3FHDCO0pXbW+LZnXyALeWTvtPGuqv0W6Z0uiFxUt8B 1mvw9U8lLVdOlif/lqmQOUEc6FLCAoUOfnhXZxYbkyQF6sr8m2lgDdz2W0IfIeQ= X-Gm-Gg: ASbGnct7R1nR0uEEBBVth1zEWThho1G28yv3qBgnKXrQyh5CKPbsXm7YzvD9adXzek3 M4Y14fnfUlEz5w4Lv7b6BR9J8GaJx2+V+2nYqqfN9VxbPPficebYbDYx7b0bwc6iCvO3NGgLiMZ oqmnMe/fz6MBu8D72qJ2ky1jxVtNwXBLgfJcIL+loLuR8NdVXio99BmiZViubhalRbPOVoq8bjz 4Ts0JBGtRN0nUg5a8NrH8p0uGJ4LeUHOEIyuAcssQD8oHERWWzLh9lvCMwmOYLzhcnzIRIvLYEa tzoNH7YJiAvhSKQk3iY+2Q0EWgNBOhaWcvQusyOlb5mMXbBOVeOO7dj6xaO+X8A= 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-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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); } +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 after @@ -1161,7 +1170,7 @@ static int direct_splice_actor(struct pipe_inode_info *pipe, long ret; file_start_write(file); - ret = do_splice_from(pipe, file, sd->opos, sd->total_len, sd->flags); + ret = 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 = sd->u.file; - return do_splice_from(pipe, file, sd->opos, sd->total_len, sd->flags); + return do_splice_from_sd(pipe, file, sd); } static void direct_file_splice_eof(struct splice_desc *sd) From patchwork Wed Mar 19 00:15:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 14021775 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 23AFE3596B for ; Wed, 19 Mar 2025 00:15:41 +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=1742343343; cv=none; b=pF7glOieeFYiXVHELwTDMO7pPuay71V0jbtpNrtV5Ud49j5yG1mL9kWbhnMY+VyJrQBEjpkkLrH6GBjD8oI1f6d6xgBmsWHojZTA0jhSLMXsCFsm1uqOEGZzFktJLDWvUcVi34gbrthnvDbcgs4rr73t7DoWt1YnwnmDMQIfDLg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343343; c=relaxed/simple; bh=4XmeV+SwsUckbKoljf1imPQeQxED4NvPOSxU0C/rldo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lxKEcTmv4l1Fr9av2Zxaoub///X9xmZ0GX2lXrfELny+vZgxlFs5yKb2A3O7XyeMd1JBxk0in/zy3Bape0n1yCmYuiggEKyNZhWwFoiuVRSckYBU7+IMa91csLRhTw4wPF5KwCq5qcHPV/PneGW+m87T06vmlPJ4bmkRbbowfYg= 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.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="LNZH3qR1" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-22580c9ee0aso108908435ad.2 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=Dvz50UTEGCFVSAABF3d5C8PTC6J2sbP1hcF8QFBUvu9AsGNRJhhjKRWcueydH7NcI3 W9b5NIUDjuG8Jz7Pf/LNDuAr5yDJeCTohQkehEpD3YstnXxKvgHZQrvzVGKI5uLkN6JE HoZEwuWGu/pmxN000/uXNGKqYD0gIUAAZDV+8RUub5C5Sp23843SegUuXQu1CmnVNUr1 4SsFw4x3mma6TQfz0hOpA8iIhR4TIJSbKuj9J5T/Tuxh5oYDYYt+lwqdiVeAsu6Lmlhi zOg4FkoU6AGQT7uKFKNwBKM0YN0qIATnja7i0T6FFrCK8GOrayfz4VOtEhMGZGLr4FFM rwTA== X-Forwarded-Encrypted: i=1; AJvYcCXzb7zt9L+zAEal8yowue4UsrV3mQcftAYpWIJnJbdAm6YG5oXNahP3L+IvcILnAo7OyPeDOvAB1h0awFtR@vger.kernel.org X-Gm-Message-State: AOJu0Yz3pGEb7j6uq9f2HuD7dYX/SzDXmb2OJtTbUGXKvbVoY8xgukSD EBjPDywEmEOiQxKlOWJxqF6CluojwsMAQzFy+zsD/zgew7gzipjdK3B27hgoMV4= X-Gm-Gg: ASbGnctkt2fgPC9DKiXzgv+2gjtwy/0oNHMDroMky7cI9xHC+/mVeOZhHPWepz6XVFZ belPcdUhMeHgpge4f83HfnE6QnBGkemTEdNUap8+JtKIMGYtsK0kCXig0aoeVST8PGczhDRbaEV MPdo0YTSl8H2VuanBttBaU3fw98xcjdq5o0PLtNx7IMKmVzj65x/yAOIRwLt9hwhVhXPmkOwdPk Vje7kmyPhfrzMGgRP4VYZ6Jf2kBZfIxZR4YlFPPqDyoi0gBu6ctRKep3SVlfZ9z82Pz/Ju0G8Yg V/YKFI6LP9MxRccXLa4IhaE7IJuooV1hrBV9nSCnv5bayDk2MpWEMzd+G6DbiJ4= 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-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 +#include + #include "internal.h" /* @@ -783,21 +785,10 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out, EXPORT_SYMBOL(iter_file_splice_write); #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 copying - * 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 = 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 copying + * 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 static int warn_unsupported(struct file *file, const char *op) From patchwork Wed Mar 19 00:15:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 14021776 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 C268515B543 for ; Wed, 19 Mar 2025 00:15:43 +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=1742343345; cv=none; b=pNwLh6no3w8Ntl65yxDeotNmxYMdZqhDDJMA3be3/EySo7UWbp/djb2yvcENVcJXIYeYADB8q3qM4413ZokYTTXbWVK8w097yRJQFx6jS2qAngT8RYH84zlqgB/MlKHTZvDqjGX7AvmHfAX/zkj99VYkV6fk4xcdsS7qhdzk8qw= 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.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="gIVpTV15" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2254e0b4b79so19025465ad.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=xO0yywV/c9q1yMN6OPFG+G9isAGWF/vvg9ld3eaZvguSVVeQM48nK7VOp31//I5HXP f+dwQeOLIxvkvHPtYmE/K7LldfmRpRS3xc7kPV4d3Jojhe7BpWwOCX7Xna/ogRiF8xEK oW31QgJq56OIIIMG5DejxsRhGVely+2t8ByJ6jnnsDdZjoxwlqchefEZllM2CmBpCLA5 H0qU4JWydbaKma2HuwRvpTM2fom/G2DqIxAVOHZYupBLmnjslma0Rl1m9Pm6qBwwhz53 AzExfMoaSguh5i4pTsrzyc4VPQ7oxRklVZUvFth3o710UEM+PrQ1zK2EZLkv2aEIvySt jwLg== X-Forwarded-Encrypted: i=1; AJvYcCV/SiCJURfFAyNTb3H+FVZRukzWQfTcypwGD4di5VhsiED3zM8fT6WmA/vPdyM323hk8hZK82TRGjfKgdQ6@vger.kernel.org X-Gm-Message-State: AOJu0Yw9KmvUt4XHORvwT5YqDOOzVMB1NkSAs8WQkvYPmatM3tjRGP/1 eM3jH/88eWHx896PyXPbGN3jzLsHhRH2UYvP7F0a8LKwwVqoU0EYsy6BIc1oRXY= X-Gm-Gg: ASbGncub5io+IghN0nPqM/v07GFzCppoHl2Wx4Yx0uSxBIytH88p1d7HsFUCD/h4eu1 Kqjd2eUDvfvj+i6xLXh4jgkNs1xMIZznLZxHpWcQivO+DeycNeSlS2sY5ejZ/HhUGOuQx9EAnqq ovDExcnWEpNDYcfXJIKzIKC+sytv553Qgua/iCanIsIlfNcNxlgKaNGxDGtheQwKn3AiTsx20Yj FBSJSI/Ph2OKCgxW6Lgtm32xNkEny12KtRZSIQbA7CMUXTQq5MPISOkcr/uFsNHs+pSDDXQSK1A AiIdVjMUBWNKyShT+7HgO3LslvZYLxXu3d34qbnwR4asPOFNoaHm 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-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 |= MSG_DONTWAIT; + if (unlikely(flags & SPLICE_F_ZC) && ubuf_info) { + msg.msg_flags = MSG_ZEROCOPY; + msg.msg_ubuf = ubuf_info; + } + iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, bvec, bc, len - remain); ret = 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; + if (unlikely(flags & SPLICE_F_ZC)) { + struct socket *sock = sock_from_file(out); + struct sock *sk = sock->sk; + struct ubuf_info *ubuf_info; + + ubuf_info = msg_zerocopy_realloc(sk, len, NULL); + if (!ubuf_info) + return -ENOMEM; + sd.ubuf_info = ubuf_info; + } + ret = splice_direct_to_actor(in, &sd, actor); if (ret > 0) *ppos = sd.pos; + 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 */ -#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) /* * Passed to the actors From patchwork Wed Mar 19 00:15:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 14021777 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 5CF4215A85E for ; Wed, 19 Mar 2025 00:15:45 +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=PREwCmIEpKSx4iJTh8pvT1ymzMxIv9cZbJyNxBxyO0eQ48z4JY7yFRUjMDlnVO2dC8kH7yiAE/Jnta+yImvWSDyHl/GEvYnooadIr0/wzNpFxecCc6IQQi9bRziwNqOhFwccz85PtiUxTLI3nmZUs7+baW5KRin6jItlpbXphBc= 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.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="TEXnBMMg" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-22403cbb47fso118237735ad.0 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=luqjqLxgaHwA0W8Q8j9w9ZQ48kzDRQX/GmjECZbt0SzFDa+6rGw6RrOMqbIqCfUJhe sTJyCgvNgHHgAs9nVxJCH+wW8MJpcwsa4380/h1TGyDJw7iRBGa+9QD7yCM/wR05dzKC rfn8alELC7UDL3k47l3quMfGvW6t38xu+Pgnz1vLF6Lzf/YlaeZgvFHNP8YYcw3hpRHI VMoN+k8HI5/S03PA5ktSavMX67cL3+Oxihsy7RylXeofLLSqBqg1LXrwScbYmQiP3Bz7 S9MHpfgFqxh8sROvtPBjPuq8qLvYbJQ7AerYPSFchjX4Evu1VyUcXTb5cG7lclDOY1yW PZGg== X-Forwarded-Encrypted: i=1; AJvYcCVo44yebteF5QmuzV87pVh6VzCPI90mkjuxAha6CczBweyegcz8Jp/UZTem0fU+ReVg/fy73s0Hn4Ui0uHt@vger.kernel.org X-Gm-Message-State: AOJu0Yyk5/LkUJSG+SqtAAfSZ+YsfIxWbB/JSnXwTsUAInHtNghe0iw/ VYX9hNaPtP4J17aQzh1+wE2gfk/oxHo80BGiEPQSejQdskoPeqRkvHDqXV60CaA= X-Gm-Gg: ASbGnct7w2GPxP9bSI/eXRn3eJ5hTov5zoHxR/omsAv6JERd3zcnIoR1BdlSTJQoUP0 nUwiGwAKrkEZmAZ6sbOgqY2XgXGREZsxwrtVLTp9hPOd1Tn7+ynP06v86yfzGowCc9IFb4q7i44 rVMzIbjbDzS2T2m2SJYWm7yUjQ1+6s+GDdzQ3ECtPGKRBYSfBfEbrNFyhNShIXvG7s8kl30n2xH R4Bp2X3NVLbTGrJhwHvXd1fQJgEMjeA6rbNw/8ZTTp4IF7PuvNlE8Qi2PP+WqHDWK+BN+LthuPw cbFSynCcyyLL3KzExkjqD4MeMtOMhO//ebI0FMOGNj3+uGaRi5Wd 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-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 = splice_socket_generic(pipe, out, sd->opos, sd->total_len, + sd->flags, sd->ubuf_info); + return ret; +} #endif 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); + } } /* 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; typedef unsigned int __bitwise fop_flags_t; @@ -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 *, struct 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, 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); 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 = { .release = sock_close, .fasync = sock_fasync, .splice_write = splice_to_socket, + .splice_write_sd = splice_to_socket_sd, .splice_read = sock_splice_read, .splice_eof = sock_splice_eof, .show_fdinfo = sock_show_fdinfo, From patchwork Wed Mar 19 00:15:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 14021778 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (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 14CEE1A8F94 for ; Wed, 19 Mar 2025 00:15:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343348; cv=none; b=On1FtFVMgTCMeDO7ZkNFJDYuUH3MGMQ4fNSpGUhaYwLmjsVYPlhaA8lYegL8iQzo5fZ1Ae67t6xH64mqSII4K0hUSUbkmy8jWcpNIBgiF+xJ/DX9IBnttyINCBdQevPrQ7yVf8d4TCk0Rtc8bCeOVi042JVcxgDxn0uMF08DTHU= 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.178 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-f178.google.com with SMTP id d9443c01a7336-22401f4d35aso118511945ad.2 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=JYiU5Ta7MUYznjeAVkNVcQ9DNdUBpRhEKpAuhDdn6UtT8iWQBujA/h5KPyUejZdiAl Hi82UMOJJul+pAk9rROA8v1oHZQScKuTRGNK0iEtmXnhori7SsOrb8fpPHlzZI7c6B+O nY3HNum2nIzsqWGYIbiVzxmChlP/PXjVlU2/KgMDJC2BOXT8u05Q9r17dPPdhB4gyFjW jTrgJkUp+B8pJUfKC0Iu7SeCxebXCvYMU4nYKWYVDvXsba6vEBh5mPPmk156lH8BhM5v BdetWuPRYgBSyFhrLv1HRvD0X4grcCOd1ChQkNjDK13LKLRNOukv9X8BNIYO+FhSVgI2 MZOQ== X-Forwarded-Encrypted: i=1; AJvYcCXiaYHJbFaawMsy0mmBLBNxVlY0B/5bDC5SNIdT0/GXhOnJ8p77KZLj9jv47Gu8F9LnBkSMGVX9/7UPzqaf@vger.kernel.org X-Gm-Message-State: AOJu0YyilvD0L1rsaGDqOd6M5QAEa89W9zFQqgNelNETVMxywZM+ljWI awd7a4Wayzw2IC8Z+yDcIsAs0w/tN6G0GOhsiCkI37mFfktomrG3ifor7APta40= X-Gm-Gg: ASbGncvtvupNceTNd8tlohOQ/RooXj4YNyv8c5LPzhWqW2BNpT+Jx3iQEKAmbDcb8qP 7gjzoD57Snu8Kujt66gH2wdrIG6Z0kvbJdAZnf95t1VFjtwzozUtIW/6JEvQxmY9QfbLs3AUUUM kQdeR3aCoSwx8tb2pVdxunJqf4qnhw9H3sXUfiBw3PXhzoj/UKsRaReYotU8wPyoGgThKpNQ6je XNTIRsM8u+KkWfVkhBrDBQ+WCmq8P7/76tn+IriGEAh6IiCHm78CgKGgM10QagLexJjhGseRaTC 8uYgFYZFc7VJdKt49MWRZfAiwdXTCGqMXDin2k6wj/STctNylbuCP7E1C/WclQw= 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-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 */ 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 = off; - ret = do_sendfile(out_fd, in_fd, &pos, count, MAX_NON_LFS); + ret = do_sendfile(out_fd, in_fd, &pos, count, MAX_NON_LFS, 0); if (unlikely(put_user(pos, offset))) return -EFAULT; return ret; } - return do_sendfile(out_fd, in_fd, NULL, count, 0); + return do_sendfile(out_fd, in_fd, NULL, count, 0, 0); } SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd, loff_t __user *, offset, 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 = do_sendfile(out_fd, in_fd, &pos, count, 0); + ret = do_sendfile(out_fd, in_fd, &pos, count, 0, 0); if (unlikely(put_user(pos, offset))) return -EFAULT; return ret; } - return do_sendfile(out_fd, in_fd, NULL, count, 0); + return do_sendfile(out_fd, in_fd, NULL, count, 0, 0); } #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 = off; - ret = do_sendfile(out_fd, in_fd, &pos, count, MAX_NON_LFS); + ret = do_sendfile(out_fd, in_fd, &pos, count, MAX_NON_LFS, 0); if (unlikely(put_user(pos, offset))) return -EFAULT; return ret; } - return do_sendfile(out_fd, in_fd, NULL, count, 0); + return do_sendfile(out_fd, in_fd, NULL, count, 0, 0); } 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 = do_sendfile(out_fd, in_fd, &pos, count, 0); + ret = do_sendfile(out_fd, in_fd, &pos, count, 0, 0); if (unlikely(put_user(pos, offset))) return -EFAULT; return ret; } - return do_sendfile(out_fd, in_fd, NULL, count, 0); + return do_sendfile(out_fd, in_fd, NULL, count, 0, 0); } #endif From patchwork Wed Mar 19 00:15:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 14021779 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (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 DCED71B4138 for ; Wed, 19 Mar 2025 00:15:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343350; cv=none; b=bmimXXevLA+uE2PUzWhNuTTyESG3LVqGqtFaPGh8O55ZEQnAKYYwS7wU4/c19H6TFJ4lkxdLEvQrJLDZx0d9k1bHSvvWGopvo1W3Gs635D3Vm+ZtR+DK7wn5uMvXLBMH8stV9za9ZLVB6tMmHFuPQahygp71BQ9hyMEMlQ5DHJs= 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.175 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-f175.google.com with SMTP id d9443c01a7336-22548a28d0cso18570615ad.3 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=ShZxSo47azRtKPDDreiW1C3MQLWIwboeMwyOBhLQIbOP2ahEOnq0TK+Lu8IkLTtsCi 8RAiK0jr3deg8x2oYZn5hpbZhlRNQcFtf+2m8Q0L3uQpe+dg+3rDq6/la1nOs13Nt+SE IbKrkDwx6gUVZw6S+gZ5slikv/yq4GO6bSki9JcdXaNyIfQAXS52n3Esdtz/65cVHvMM cJE62u40c3DTmIkrCebNo+KKrlW3IfFW0M0VHlYpPjBTzT+Uj1QOnJe+TFNKf16Viz9w gKXlrKwnuAnrQjIGOnuXKGae9NkxYZ6+acoWSaamnff/GYwqtlAFn1+js3XNZjV4gSQu KvnA== X-Forwarded-Encrypted: i=1; AJvYcCVbVcLqeX+rWWCE0myJ7ZMDPJ4zNJAIHPV6L0wCIqjxtuLkIbXnySRvXr+3B2jG+a+FYOwaMgNLhgrphviR@vger.kernel.org X-Gm-Message-State: AOJu0Ywgtli8kDiNlHFS86c6kRa83tjbAsdPoIdfahWZqi/sZ/KR4z+z 43bU4IDb5Z1jtzR1v/kuwGOPiEVCjB06z7E6/U5QGXYg2RC1oCa3OydNn6ZG2FY= X-Gm-Gg: ASbGncu5W+ZGUOPPS75GgtS99w/J3E1fO2UMzCHooHTN1cqCVnxvdq8KBjrwMyqUlM9 RQAi3UKn+L6H4wOeeSipS7fB/E8X7Fhj60pFpiJqrRszZP5ArY1vn+H+VZ1sQU5xO8ZI1Fx3Ze9 IgAGarAVS/jXbewTW5paYayTuPaITBkmHhUPEghH/i3EAdqL7OaT0benTsgbn7qWuNMUgNpDnoo FDFMgzFK47PhAZ+hn+tN4goc4hwZdc0kl3UKfavH5kwfs6VOl5AW9LlL/WVHgWucfm0wMl4cQPF JY0AUnlyGwgpwlCbgxqh7JeaaIr3wmjEoqmCbHya2wYvbROqqcG8 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-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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); } +SYSCALL_DEFINE5(sendfile2, int, out_fd, int, in_fd, loff_t __user *, offset, 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 = 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) From patchwork Wed Mar 19 00:15:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 14021780 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 8317F1BE251 for ; Wed, 19 Mar 2025 00:15:50 +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=1742343352; cv=none; b=Kz9wJfM/aL1OkwfRlIK17IXR+b+aBeQhyoLxMcKELQQUiqCtT/dcEuz3PkOzbFwfIOr6aoKvSBU1YICp0XTiW4IeTzbaUltkYX34UDbK0ln8/fYLDE+bqP7disoiJFf9rpK7OJq2kyp9dK9Cf+bHv31Jt9P2nvzju8W3FWnj4/s= 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.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="Fgfu4GvO" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-22622ddcc35so7154465ad.2 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=OmUKGkg7yatY0PWYRI+aLIpWyQQIjaDnIpkPHG5vgR5adeXJ+wPayQp/LGMdfyhRAR BMUEv8tpoubm8zbbb8TfqTMsOiRS69vmpluNQH8vN3oiB+4c5KD3RYjItYFm3WGhE3y9 h6hY5+MlG0Via8BKe2RmA7vS+K1gsuFyg629tFD1p4Pne+cqC9R1dDwpvKpqPQ7YT7l4 7DllZ9nMSzEJ76Xp9eGMNdkU3h2MEnIkTdzIBEaThzvGFlZswf3cRdyCNZitj8wKbHpz P3dyiWt9gm0MBbVAaVl4r7IKRpSz8RgVma3r6TferVwtA8IeBY7s6XVHoZ4h/OgA4/bE a3LQ== X-Forwarded-Encrypted: i=1; AJvYcCVa87CDFmZ0RzhAjwaZyKFESI7paqChm66B8AOJQLjY4M9P2ajD/TNaIJRTFgAQJ9YF5gB+Myz5lKnHyyQJ@vger.kernel.org X-Gm-Message-State: AOJu0Yw/Sdp3O3VPi12LxafOIUffjNbOBBolYfR4OubOLa0CNHxkIvUz vVCp06bWRKP3x+w4DI0ZKs/BkQqTtqNPNxIsiZjOs+MbPB0NyvUQG5alvrL3/l4= X-Gm-Gg: ASbGncu0TKakqSrTNhSZjZAFxUwNbEV/aZMlNWTzerzy2b0mj68dHm89CZ17PfLW5DM Y050Q4TKn2ZVzR6/a+LrMBxuzPXPwRK5RrQco4CKwQEIiyRLyvK0+fXOaGTEuWmmMgXiuoeKRkS lx0ym6WFR3yPIda2u9OSRmBquwDeHhVBBFlt8U7oL3SKiCvDEd+u97IKbFzuvhq23EljY3LbF4d yy3gsm0RsllZjDpypKHyU6Jx6sFRdukNz8bpGvjrP9eujikLpCtQywb5lS2jlx919dvMNIVcWdg xatOPdbeedlri4gU09pUn8X6enXG2k62R7i5SFGJsYPTisE9HlOT 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-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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, loff_t *ppos, retval = rw_verify_area(WRITE, fd_file(out), &out_pos, count); if (retval < 0) return retval; + + if (flags & SENDFILE_ZC) + fl |= SPLICE_F_ZC; + retval = 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 notifications */ + +#define SENDFILE_ALL (SENDFILE_DEFAULT|SENDFILE_ZC) + +#endif From patchwork Wed Mar 19 00:15:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 14021781 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 5C92B1C6F70 for ; Wed, 19 Mar 2025 00:15:52 +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=1742343354; cv=none; b=dQg0ijF3nxkNC9Ijf14j4QW2p2aVocEvIMRgtQg4Y7Ky/0IfLjpKalEY74A4ySNMaJEK34WAYx2YKze1kl89+bZxrX8O+ubOEQ8bQBb5a3Xtf1or3YoV1jssIbYq+vSr/qtPo59Dg0tuGmNTXWXMjs6t7717qdGxIU9t6V8IPtw= 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.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="m/qlmE01" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-226185948ffso55129895ad.0 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=CHBaqnS/BXxcPLRP/ZEC/+YsRTRjNRUzlJkvqCawceLNrKLFnBolVo09TUKXvj4pbP 0q/tQR1MEAb0ddoe1pW/tfDHyo5CYGYtjbQDGMTqWbvktI8Ue049R07HG3tVcH4KLbae aVgNNDs4M8ov4Gx/t+8VAEHkInCGTWHaVthvSNKvKldeRzBGHHHNQlWzRgy5mwYGzQWR lvBIzNAMg19sl9wlMw5c7Wd6AFqtpVLCB4pQioiffCecoorvH5K7ySrnmCiEUqyFMsuy YAGxhzQqRg4kzKbcFUNTRNDSCVkHo2+oGWfk8xEziNSFBzxzg2gJjjThDmtxMmLO+6ib PmDw== X-Forwarded-Encrypted: i=1; AJvYcCV3HkLBXGNST8ONJti4AQL9DpMHJygG5jM9rrBapQtJsb977baFfDx7pwL3Su31GghDCvYiBcmPo3h+BwYM@vger.kernel.org X-Gm-Message-State: AOJu0YyhIOXxWi+C/CmjvyX9ZLxeton11QIocYZ3XWDjFKUg1J4pqiUQ LKp8QkcxcirSuFKRmk8no5dgpcCfC+VieBKeP/GK4ACg/ojpGjGuCSQ2vTccXxw= X-Gm-Gg: ASbGncv6R8Sc/sJC/+SK6O0SOLsC7is13cdDj5ZnEt4SiClR4lyGtgc4gkiB2fw5zYU uOPITJvNKUju+lmNyLIe3C1UnNE2iuAdjtMbEpwNUlVaEjTxT1cnFdfN21mj93slnAVqe93AptX 8xjxXdNbsKtVngW0YUbOZVKjtG8Kc/yV//Qx3XgfC+In1qIWGebUTiR9gWUt28fiwpPuepEW5Ut ZWnOd0UnCt9bU1PIuY97J3Hbo8ROzLD+aJVRjz57WAULJTtzgMD/iiFzYzEtdaazprTzi9ndXEi 6HOQyh0YgwFw0Up0xJU9R3vWEYn3JfspX2Dt0nE6Ve3lDIvBnWQm 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-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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/syscalls/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/syscalls/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/syscalls/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/syscalls/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/syscalls/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/syscalls/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/syscalls/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/syscalls/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/syscalls/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/syscalls/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 # # Due to a historical design error, certain syscalls are numbered differently diff --git a/arch/xtensa/kernel/syscalls/syscall.tbl b/arch/xtensa/kernel/syscalls/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 struct 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/unistd.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) #undef __NR_syscalls -#define __NR_syscalls 467 +#define __NR_syscalls 468 /* * 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 From patchwork Wed Mar 19 00:15:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 14021782 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 101E71D416B for ; Wed, 19 Mar 2025 00:15:53 +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=1742343355; cv=none; b=HkA4YGftNlNx8F63UPfosqtP6MR9WtBH9YroWh4fX3G2Z0k6EAok5bAazQ2cAnFKP8JLk8QpQB1EuJ0Yk+rWBIRuRqxEigyE8aWRRPt1uSq/0kB0jxWkar/F8ywQaEKgPJNcLfBvK2iMJB9JO6eKSEfL/i8KZk5WpsOJZsTITrI= 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.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="vYT0YI/q" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-22435603572so102465395ad.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=uxkePYZxOdLd2ITv1qhRBy/KMIjfVF/lE+pJ1ET4ZEbBzIfwStV6pEX9A6AypV2hm6 zfvFD18LZ/IU+rD7vbaCYhihVpRH1gp3nZKl+SNKnAiViVo+SMuftgrlHaDM8N+h40GN yQyGkRXUCO/kOlWP4STPCiDwnQW64mdDVFj111H9F7MIz/CjYQxSA9el03TYeGFulPe1 iAG9kpwkvxgerg4UnsK1HWBTCR6Fhc1BOiO0UP5pwRkLsZnq9tbvWgevpeWup7+9CzKw UKdaEaefFk0CNzxVD4gGb4gfOrCn4wFNm2U7Hj8eeztju0AfO0fPpPAQTnmmV/nIqUyh uflg== X-Forwarded-Encrypted: i=1; AJvYcCVIeFLor39H0GfliNUCwpuIbA75uYp16dwNg+iB1r+zNv27OLrwobUrNGgZ2N+yDIsCsWEouxUZT/AXITX7@vger.kernel.org X-Gm-Message-State: AOJu0YzTcwtpk5JcuKAdwPP0ZVuF36TO1j1SiGO/l9PytNzrcgwyAX2Q q9PKyaB+HZsHXh/3QyIsyTAN6i48fIcP1f3LGh2YKn7PF7jx9rXYlx4An5RMMTA= X-Gm-Gg: ASbGnculCaqHQz4fajHjL30GUlDZSmt5oUwxhDsWOU2HyjzGMgZNwX1QKRMf1g55oLa 0D9Ufw4y8rSrLA3vUG/r0ie7TAOW8J1CcXIrgJOUs3d5nO9wCyx6o4/9BLKvOYBC5RRnmHlmW2P v21tOEPONwrRyPed4ncUbprq2XWETOArE6o2XEgNBydkHCU9cgElMS3OJ7CH917YkcosrDV2cys Ke2wLevE0Yy7stwueJeRSSAA7E2U0K3WQz9WKVl9WTzvmbAQkzuqSJDKFH97x+dxHPfatEv24sT qVLidgA/rZvNh9XJi5s25X3osa7oFFybtAyi88nP8bObH86HuY20Vs3lHHmqffc= 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-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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/selftests/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 +#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 = -1; /* default: pin to last cpu */ @@ -87,6 +97,8 @@ static int cfg_verbose; static int cfg_waittime_ms = 500; static int cfg_notification_limit = 32; static bool cfg_zerocopy; +static bool cfg_sendfile; +static const char *cfg_sendfile_path; static socklen_t cfg_alen; static struct sockaddr_storage cfg_dst_addr; @@ -182,6 +194,37 @@ static void add_zcopy_cookie(struct msghdr *msg, uint32_t cookie) memcpy(CMSG_DATA(cm), &cookie, sizeof(cookie)); } +static bool do_sendfile(int fd) +{ + int from_fd = open(cfg_sendfile_path, O_RDONLY, 0); + struct stat buf; + ssize_t total = 0; + ssize_t ret = 0; + off_t off = 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 = syscall(__NR_sendfile2, fd, from_fd, &off, buf.st_size, + SENDFILE_ZC); + if (ret < 0) + error(1, errno, "unable to sendfile"); + total += ret; + sends_since_notify++; + bytes += ret; + packets++; + if (ret > 0) + expected_completions++; + } + + close(from_fd); + return total == buf.st_size; +} + static bool do_sendmsg(int fd, struct msghdr *msg, bool do_zerocopy, int domain) { 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); @@ -715,7 +760,7 @@ static void parse_opts(int argc, char **argv) cfg_payload_len = max_payload_len; - while ((c = getopt(argc, argv, "46c:C:D:i:l:mp:rs:S:t:vz")) != -1) { + while ((c = getopt(argc, argv, "46c:C:D:i:l:mp:rs:S:t:vzf:w:")) != -1) { switch (c) { case '4': if (cfg_family != PF_UNSPEC) @@ -767,9 +812,16 @@ static void parse_opts(int argc, char **argv) case 'v': cfg_verbose++; break; + case 'f': + cfg_sendfile = true; + cfg_sendfile_path = optarg; + break; case 'z': cfg_zerocopy = true; break; + case 'w': + cfg_waittime_ms = 200 + strtoul(optarg, NULL, 10) * 1000; + break; } } diff --git a/tools/testing/selftests/net/msg_zerocopy.sh b/tools/testing/selftests/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 } 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 +# create sendfile test data +dd if=/dev/zero of=sendfile_data bs=1M count=8 2> /dev/null + do_test() { local readonly ARGS="$1" @@ -118,4 +122,5 @@ do_test() { do_test "${EXTRA_ARGS}" do_test "-z ${EXTRA_ARGS}" +do_test "-z -f sendfile_data ${EXTRA_ARGS}" echo ok