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: 14021762 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 797C5DF58 for ; Wed, 19 Mar 2025 00:15:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343340; cv=none; b=VMEcCPfeyFh9BIe6a2AkJka1s36zXdaAIIOrPbEUjRuRJT0cakcFmqrcx0IX98JOclx7ba0O087UEy8m6X8ij48oKEUxoXUaVHFR24Bf+7kolC6a2os4jMBeQM3y6JrOrCM24qExzm7MopSSvFaibDI3gOHWRMn5R9zXJGTtvLw= 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.48 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-f48.google.com with SMTP id 98e67ed59e1d1-2ff797f8f1bso6173234a91.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=ZNMA8enDVXAwv2y6B3CNP+XoTwGAPh2C0n+XZUVpHpVvIxKtejdH1HzQiN3c5PWKB0 gKckMK3zjKY5FexW8LkgZjI/imV7YzV8SDTRYHcG/V9IJ0HljzGpKbNGANqUoh+UgKjo i34yxrMwKHSJUQnXJEmbsFqYzWPoRPt6kRlRNcYJkmhTGsI5W+CrxvJ6xlWKcjf71zXC fAmqu9MyWVa2oF8R3/5k72kqSwudCO4bwBusRy5GrjYoA8VTHY5MagwoRcyv6d7H8tp8 Dy7+qyXtGC2n6RmQoXvssLVyWaXtCdYZVFLYySro6aWtZdVjn5CtspppBZpr9RArGToB Ib5g== X-Forwarded-Encrypted: i=1; AJvYcCVdb92EwJjy9xbf6rnloJIXJZwSOVuNfEPWf+w3YnwPh1xvLnkrkVsj9rxg3/RPW/px3GLwc+KFVNYbm73SO1E=@vger.kernel.org X-Gm-Message-State: AOJu0YwOfYvXDp7dzlEMDZW3t7iR9SwFLBcQU7ntDxGBxqjHjSPVVk0j 4K+FxJiR7ksBnxnlVr3QJZDSVGIxk6EPpjksAG1gTZwm4BM0XY6taaazqx/C3FI= X-Gm-Gg: ASbGnctTo7SIfCPhzlka68OEsrAcFILqe8JF1DnoP5g5mo9WCexechrro0jEcON2nP9 qnPzcv1duJdBA5isduLOA/OWguyQ6oGMqsgipeJcJjH56gKjRoNiqOVyouEiHTV/SKf3a+GCCV/ 1jaFcSZ3byMA86VrZIWjhUoFxlHpPhJJT7GU749G3ytippOVLpg7JssjwjPRjmPxuL0aRGlGFcw 1kFuNJPNX02sCbKhRZ4QahkcHix6fmR8YrdWYRsgof5tvroBzoDohIbp0n0QtR3OtrcqcV1GbDK +7+lKVamlzGV6WG07uNpE994qISH4z7m9TCgtF0BQJRKDoh6qKdAXPeo8UODerc= 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-kselftest@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: 14021763 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (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 5326935958 for ; Wed, 19 Mar 2025 00:15:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343341; cv=none; b=r1JIDoMWUVTpRNzyUhAXNGLZarPvzopQO/WVGWYpHJ500AYO4RlO+EpcV1GsOxueUWhOXNWDiJRfCyk1aG23ZR9i7RwKgGbi7IcRjnUMUD9Rhb8ipKiH4glEZRZn8rIg6zbJhz4hbcYZDRRHtLsmgtq2UDxbFfQO2w62/RttP0Q= 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.51 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-f51.google.com with SMTP id 98e67ed59e1d1-2f9d3d0f55dso7213674a91.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=wQaRfZSbA3/y5AvD9b47dNFT86qH0Q+z26dUJ/th6vN2bR1PHZdcOY1UeoEuNovgg1 GtmHf288U7+UbkLJU3GfGUuF9Y/4/znfZam8PczgGm4xyKqNwduWz84Dd9x1hmRPDaMk p1lLd67fUrCU/IX3cNd8b5aV4ysAc5ZHdA4a0ARlyFspXqkz8lAj1rSj+SvYWCONgdeV LvDk2G+O6cwlXTPHC6vcUqmPFIazvIKCzoIlmMXJwjG7ljeNPYwbQyd8iK9sqM1Yxh1k oHW0iyD7L5jW01BrJoZn6gcGXHqme4NFG9u4x2YK4aR4lXn7QvPrc1Pbv7OLua+R66xL eJdQ== X-Forwarded-Encrypted: i=1; AJvYcCXj7qXfp2cMzmDiSIAbHIss9+S8Qc0QgKg1f5hB7X1MWzlasEdPtKDrdDkBEeQCCelP64kJTS1ky1Wx8Zeelw8=@vger.kernel.org X-Gm-Message-State: AOJu0YyAnVXonlKFPEVbfzp95HvpYv5oTgYAA2bsSUrvz8JxKC85XNUa woRi2HGYIt+e4D+oK4XSZSSF7XgAY27VUVwXRHIGDuzD/u+SqOrCD9u7WzJoTRY= X-Gm-Gg: ASbGncsnGSTu/EeZfw7DCR1rfMIiy5laGaB8A+67gitsUZH+uPKq6Vi2wf8XNUYCFjg vxHYbfOun6StYKh8l/HP5Rkr1gan3nJCWlBaNkEvu+EUgqQnbQNQMhgemBCueG8FzZ1VfGgHoe+ POx1MtCW7EgFqnrvPY2aC9MTagRyRNA/4XM1E+lerrS7IFuBhNZuDKRDVTeCKMOk3WZB4QK/vaG G80UJTDjCo+RiaRN1iTFfK5TzU/0nX1aQUnQdvdjU4QP3fVRdYWN+C39pizOPan8wDMlE9RY0Ae 4/UJsEONAJ02f90hBV5uswNd0eK+FHXb+PJ6pdv8iJP7r+gn8HQEMvSD1lGBMsI= 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-kselftest@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: 14021764 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 E2EC713CFB6 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=1742343343; cv=none; b=Z6pQdgRAiwHivlQA9RSEaqtj7zb6QJRWfTBvridrf6zk5X4z+RHw0XVJ1kb0hlUMMqwATFFlEtMzqjqkOT62/LlR1TzRN8dNhnGB+v61aQnFr29sPLgAKXvJcXQnrkFl+hC0bYOsTjc+a5a6xvJXpWZixvEc2PXMb1UsxZSRhms= 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.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-22438c356c8so108919885ad.1 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=hjVAYruRNSFBzPqUdfkeTi6IGMfIj8i0RNgyw78lf7CxTFAB5MiI2gox6qmBsTsOVJ 1AWmr55ndh0/L3vTcNunAj2xRAdawkvINFXZR+MtClboQJbcgDC5uR2xZ7oXQsUaRmjc CVrT395gyh3oroOSBaqit2cJQe4L0v2rEVVy2dZn+GLoxMrrOVxxB0/06Deazw9PRjY5 FDmzZRbCEDeii6B8CI0y28p+N/iwZyKvzg/rMaBQqcTDbn/7yzZFzHudhoVjQyyT90XH UoyBLZ9EElz05fb0VQmeYJaE9aNHJP+eQXueQisXUiwWOZWwDrr6cMaYIdQi6ihN2Zc8 tSSQ== X-Forwarded-Encrypted: i=1; AJvYcCWJBxHVeGr38xnoLuHSACY49lbUfycpprs8KQgPTPySzGUEE6Ysk3GINqQ2hGM/Zl7ZQtPy/zg7Jmj0nPlJhOQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwQ4mXg+xKgTcndRk4xta8I1Yxy362PJLuFsHOM41F50Ol+Wq6F XYC4EfAHeIWTKwp4WXdXZzdQNnVx5PGj43uRJB2zV+L/1vEJj8mTPSZjygLCqko= X-Gm-Gg: ASbGncup1zuKAK0MTjX3W5+g/VRb69JRVMnppvcWfcF9SI94OghKoRNTIxA7e+jv8zD z480ejjmIR4hwWoo2nS9ZC3YWXhEw1Asb1T2i7lkqGcpFW/saj6Cxn+R2ysukds10oeiuv00pGx X5d9jNVE0FVJpaR1QHleoXfNeji8JppH1BBVNrnlFkC1DNHP7amd6IOSlUbNB73839OSntNiDZZ ea4G0SLpI+ARR3ILI/3vU9vc8Ia/CiksTNWzK/soLGTMBh+lm4GvYpKN8QkGZywHqLVDOTWcA2H x9g6q2zmOsEN4BXvOS3eMtTUIDKbmzjkhzfxmbr07hmL8bXpQUqAcBjXSuYjGgU= 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-kselftest@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: 14021765 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 9DE2C15A85E 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=1742343346; cv=none; b=YO1KvzrGmYkBmTe/KZR+B7FvsUOnFw2jgSF/76y0Tyvz2STOxQuJvcqBeVz25j4n7TfUEvGcXwIeEVFMhUd//IouGQtkfdDU1Wggf98Cr7wA879UN6GA0FqZy/fxWEsDBXMZfasl/nUurGlrGyP3Tatc5QcB2qPHEUNsIKNWhmw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343346; c=relaxed/simple; bh=SowAWf3suxdJmhbIj/+rpT/CNsAYNCCACOuR5s/3LGE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DbNxVzGLfrmTXGkf2R7OcIeT2k/gZ61iYIXuRclafKxKZO26g2hT/By0LaN8g4ZuXzAJn2w4beXi5zBuCNiVxzBoqOx/McGzYZuG6KliLqBuJ/0t9CtxYlYpDxxFlouSiiTTdiC+5TZzbPbUOcCh9IQNM8Na9LlQn9rJZ7vBaGI= 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-22548a28d0cso18569495ad.3 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=oyS+e1r1vjVzIC4pHOfF2lZGp8Xhg2W2xGSCwH6E3fsmfjlgNZ4DDiCAb19fsgc8mO 0ZHrFkgf95H2PM/9/yrddeKTdrpjBR/3EFhdV53CehgYRhmHF7Gz6KcEbQ5bmmYGhgzk +Mg0eMUXvdtJwnnW/za2MZngB073+uGxVdL5SdduiRu0UzdHM//TZrChNrYD9acScd8b j0buqa+2jkjvJ8SRlp2CgXYET6SgoGRJzMCD87tvtgtW5kM+3f4ARKq5VN6yzFvEvap0 CBjnXpakAYfafdkTiCNW+7WEmNFfveweirvfeiwj5UweL4hXp+8Oc5wg0BOAvx/W8NqG Xpzg== X-Forwarded-Encrypted: i=1; AJvYcCW7P+dbnvytYKEcXztpMO1tRL9BQYtKaOJWI5CE6+8ZU25oRo3x3WBHLScjqkSzVaUF/U5PWSp0nrZgOO7PaEg=@vger.kernel.org X-Gm-Message-State: AOJu0Yzh7nfO9qn77aSbFd7C+cQzzFvUtNGkNsrRI3NEv2LccPcNjWTM qO3IGcu8qA91oGfC+zlO7fqHW9fwGxajNBmjXCtSelGwkd3ADC85+VKyuKy4n64= X-Gm-Gg: ASbGncu4kMiuDmM8E8frhtqYbCZrCQM6c/nuLwmyGoaawR3jiwMTi0DGvjbo2tIIuMR hAlVK0ZZJRZohidsy5+A8VfJGYHng+xJtu40fw9ZBdWqr4DO2YEdOM6zS5AiN9xpmqaiuD0AcMl 7+aWW5kgCKGUC5Czmt0GoqocKioY0+ZTonOolBLP2094hKkeNNc2iiACG3ZbX6sic2cyttk+tIJ YIMLvVt0SpsM9BcfmokQx5iD1XOpoAN1tFl3WmQtnvxAe2f5qERT1o6azEtu+EpZ5SZ5YjgYbz3 y0s5Z7DwTCA8CUUw4wBoJkuNG1o3kO53TI/smnGpFfiDyfu/8GQb 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-kselftest@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: 14021766 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (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 5BBA718C322 for ; Wed, 19 Mar 2025 00:15:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343347; cv=none; b=Y1AsTJ/k1HnOwm+dai3WfJkPpweU8K6RCUu0f+YKe3JwvcDv8iW1+ikVQjrY/MxIe3nJz3jGKrZyCw0oABkQIQr+cXkHiBKBo6gKsDONHlBgbD1jfa8eufgg5Iae1aznH0+RvPY0id5Kqi21naKy+Y2IhykRkE2z7I1ULupPWt4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343347; c=relaxed/simple; bh=Fj2ZLr2NuM8eVI7Uv7KChJMeytj/MaTnY6KtSJCMWGg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VpEvhn3vrDO9xEpKGtMdKkKXNlJHOX8Mz7ODtJZ3px7U4v+g6G1gzpOPOWy1EIlqwPKTW9MsRrR8k57bRHH5tBwA/juBGV23UFHjG4ZuBqT2cLDkdZGwZyREzTSdrEX4uelu1UrQIeiTCu2FwzWs4d03xjOpXh38rppyMduhwu0= 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.180 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-f180.google.com with SMTP id d9443c01a7336-22438c356c8so108920305ad.1 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=Mf94flGIfD0RgxeSFgTbEAxkO5zUcq0goum33gmtRdTm+sB8vy76aJ1ysrKprMIvf8 UyXmWKvQjI+JydwSLrMdRWEi47q5Kpo+VZmx8P2v6MMHcCzzLrQO5l3ny01OqoCvkrin 52JtTWETJlJAc2pZ+alTzvKj4VPbwcOJBJrYv+Yft/BsC55CpSfnzks7SDujCLXKXTbZ 7B0KND1fu5PHO2G6slA4zuc6IN1M8uoNG+BIKBAd/UUNuie0S09/tWc3po50gO5qSQjC Cl+uKJ8RIl/QtkXyxym0o+0YrRxoFMA0lC2jvmOSg3kso/fWSsFXLBzHzjdA4QVTUFcc D+nw== X-Forwarded-Encrypted: i=1; AJvYcCVWTtG97h2VMnqSyDPzWGXIt3i8pk96YE/hd75v/djxs1jwqKYzwmjVyl8I3/yVAp37eM3sYXsSHIDMKVVH3Q8=@vger.kernel.org X-Gm-Message-State: AOJu0YzUVOD5sFBQFzzBhwalBZQlpJdopdAZe+dbIeL/nrChVlxUBxEk 32hZLscYULnLIcE3d71Ih/L4VbexbPMl/eAOZmPK2QR9VtfKZbdkq7QNXtEmMPU= X-Gm-Gg: ASbGnctxaO8G2kSLwQkbmjJW3PlkV+mtQPTKYsXLAp0fwqKtTGFzyb6d9UExasjOEMY Q6lyT+0JnmEl8cDOomXtRCWpRm+xiMPhDeiGhj2QYbrlbROk1y7gAmn+huqZjR8tDMxKE8/FyDb EKo3BaDdASF98mRTsXciTjT1iDegI1vSHk0Cxrm3coa7MElFEBdCJgCJsFDOmYi8snn0wjTg57r qJZj4rfmEaXXloIHgJc+GuKquiZe4brEV8UTn2tw9qLQo/HjVAa0jgHuCllO76VDxWIY5fDDhOU 7iI0FHgQnBJ6Npg3aN6tqBBmSGem4Qs0QA8yOqwPMNpDSUAb1MJF 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-kselftest@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: 14021767 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 383331A9B5D for ; Wed, 19 Mar 2025 00:15:46 +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=1742343349; cv=none; b=rh8rbPW9oRmDtYgod8NUdjMh+ltxZBIKZOlFNstC2VCY0GGKJBTaznIQP+ilP5qrpLOO4Win3LDlaw1KVh84b0l4ib2oe6+TK5X6qgxbwn4ZJ/+1hhpNZEy8kGdktUiAONxPmwP6HPQ+qR0l80l73B2Td/QYHghJbdxrUtDOx00= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343349; c=relaxed/simple; bh=5PCOzmacR5yYFup3o8g8dQwSPaboFM0aGB+HiTMI2DM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ltFGVxbIWloGTy6U2RXtu8OqQLOTWZFdf8YNVVRNWgUkc7mgf1WrVpvMBBrmulzO6zGBq2SAViDeh0+JXaWzkohc7LesqCG1NhZR3pGisJKd1B4eMmMTjpNlCVur0Q4Dk/w+fzY8cDSXwYTBnew3xtheEQON5usrx5WDBAgdGHY= 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.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="YMPzI8dC" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-224341bbc1dso119939475ad.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=FeyTIeDDlZgZBqb4uAnH5QKLQvADhluare/mbFDuDwG2AeF+f5smw2of+JisNJGI62 olc3ncDvpL85qaTKZNTY0HyTZkLEOVxrW2A/SBNRGmNXm0fN0BMy3yul8lCq+ZWBWVuB P6mtDuJ9mTRbiKF0NmA9zdYJPFKdi9ZgiB1zJ2Qv8ug4iavuFPbQ97hWEw2m/k8QzcBe p4+mc2vWCTkbIST12k6VyoNuhcznnmC1I6aiRMKRBxXfdJrI1F6Gd6TLPpl+HGYbhgam A0E+Ul5A2/7VgPvpj2MlZJObUPr/K8joST14doGwPzDteQe6KhbatCVocWRDhSH/iIOi aSUw== X-Forwarded-Encrypted: i=1; AJvYcCU4mUkVei9t5+tAjrOm3ulacx51XkzeIT4nJteunnVrrCpd2cs+v92H4PmfudsvSsn1jT1vwVlZuUTySQMMJUY=@vger.kernel.org X-Gm-Message-State: AOJu0YxRVuIxQAy7Hl/vSkhrvf1/8KV+1lKoRRxjmdnJRjy3cosHvuWI 5HEL40f4vcZZHNuuZAp1gyYTzp6toZjlOU8GQVfkxaUrBiDA7jJ1WrlDJt9QqZU= X-Gm-Gg: ASbGncv6DIEBOBDUASN2LdbAHgHoHTPgaP09m0EXyuiAICFOn7Ng/MYHyWAakDF8NsA Re/7FNP4A4VejLa5ECL6hu/PegEyjkP8OWdgAJ3eqbyRMj15Ot3yzUFDqfGTa0xZYXvmgNW6ush D5gzXLHuRC2ZOXXZtw2Qec27A2iNF3Pmw5jzPIKgauEL/vF6hFQVqUGakkMwDGHMVN7PXvisDfj 8wBSo+b/Of2Nl4m8scr6VKLUdDz7pQo2gfVIl/GrHTjh92rFktzO4cOC0gYNl4qJO6XxRcq0rgL fI1rGDx/YD23SPpFK6EmKyxJU2ogOhHyNaJBOj64UDg6fdqxthKKRlKawZmR2fU= 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-kselftest@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: 14021768 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 DCE501B395F for ; Wed, 19 Mar 2025 00:15:48 +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=1742343350; cv=none; b=FpAZkjY38fMlGAchXeyUswF112Y5fSSD9T2tn8ZA38gt5PpUAv1QDWFIkkRkrVPvymBvhJFsVtLbNiK3wR2A3XwFeUTvlmTWr3Q+6Rj7NYFUTp6ZXFK044kymayCCWKLkHlAeAWiKqlNSO3dnnwSHG+Emr4u4R9QhkEMfyzmOYY= 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.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="LdwLkSF8" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-22548a28d0cso18570605ad.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=AF6acbT/6H29s6jNvGQ4jnYsgktoJBAurLBAkv2nMiwia3ooyNxxirGyHNz1icuPh1 IeemB8+L/n2HxxjIDoD6rsYKwHZiB2Cw6ItOx0hmPsNj1NjgSKLIthDAYaDP2KS7W8Fq HX4nnjpDi36GCJZqH1vVn9t4D8YK6iN1O/JPajvYbmHwAC/cAIs0NiTMrlgEJNjtBCHX pvrWsnsHkS8UJAfMHsv2rQcz+WIMkRxujj6gOOtLVgTBjqAuicVvQKBgb0smxnDGHvLF JAbCaOssxuQCk9ZlI40ewjAEfrnulvUSD7ZRlMUVY7Jh8slB7p+BsRE1er1vhaDUkFh/ mLww== X-Forwarded-Encrypted: i=1; AJvYcCW98fZyzvNmPJE3BxUeZemoURwIawd6Zm75HTu2Is9TrTUzlHipATkmeN9xsM9L11TV8Gd5+ZOoa/FN5u7TYA8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx621w3fyx5Bt0nKA736h9sKQwuKm1tqr1vQotpAV/dV2kVKrUn rhGqfTORczFtuIPnFhReUD6qWy9AsybA4JH1SP1gYcUDTmG0pa4G6iD3h9uv1Rs= X-Gm-Gg: ASbGncuJxSzjPKrJ+GXjozwudBPsl5TsfsqP7+MCYj5hJBfCqyzFL00h7lboJG9p+BL LGVw7VN7QDVgBiDtDf5Ndfl944r9/FAwjrqVbFLSQCjYMc1D8+ZQtAWd0TW/5FMGeZlJ9Nazo65 +WQZsgMT0qUD0pUFG67LpKi8RjR8VA5cLzOa4x0sUKu5XlkP87Z0hJ0FAKjmcDbTNMGv5I/eJAY 6Mv8GXxMkTnFgqtYnj2x57xp3ZfrcmCZKK4Z0Jh+UxqxSD40LqrBkZXq8MTGXc2Yqv+isHIUv3M Loek0VDd7Jb3/1qPTnYIYkZD2sJer2CFbp1KZj8EE7cB9W46JtXB 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-kselftest@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: 14021769 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 9B14B1C1AB4 for ; Wed, 19 Mar 2025 00:15:50 +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=1742343352; cv=none; b=R/Fv3h8pKyfaFNGt37DFpcRU7KecgJbHy4+D4Hoc11KZqPUqwewO9G1vOJ9/w8Q6joM/shn9aSz+qhQBW01/n9IYGO+rE7APi+VArpZaL8uJ9U+/Ff6tGvF5kj9ypgluPg0pUXu4VP5rcVW9fsdJ0A02/vx+GnERqPoFG2lhOZk= 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.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="Fgfu4GvO" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2243803b776so7330005ad.0 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=nrruTG5/ZBCB7e+bT4yyD9XCOcS6pEnDqKg9iMIP60Pc1U4cRag+MprEuQHdoqMkVC VaFDJ2/kraaPF1KHjrn4uGMSqEpO5UnMlO1+TkCODoLgw06uk5siDdJnwjdCP4vARTgw LKBp/m3dkrVJnYvVlq+pZT4DvblFJR4RxZGA7/SoHF7z29P+dsCik93jeuhI1qTqeLdd sfeQ02XMxAqbd9+etjWEIKMNV276XsS94IkLl7QtXE3TfAKBAw6/W/p+4TlIsphbd90Z 02/ebr5wIsc8DtsLsmVDcnMmMEyjNSn+JRHE39nZXmkAjLmDi1oUJz1jzqJf+jLs/zwC ck1w== X-Forwarded-Encrypted: i=1; AJvYcCWAByOxXam0Rvn82fWMP45TZ4DZ+Rd7uDxbeTW8bj3fXaOnGb3MsrhTjxi1XnQoSkV/aZBDsDej7X/aknL4VB4=@vger.kernel.org X-Gm-Message-State: AOJu0YztlUbFkpLGjLiD2fxkF/qVRlnalc0db7kwoawfNwzmNvmse2cX UbQepIJXHB+JRwwNMwqXYvb9RJmIE+y5pawFeF3lDXNHV4syh0V/PpwFYfXxSAE= X-Gm-Gg: ASbGncu9DoYp4jU2ZTcM0uhefB70cx/J34TEHA08PMSuNZUjrjNSkzeXhjeQ1qJZ40s mRNsKM6jjkm8o1TPsh3b58O0RaJ0Xm7bqTmo7tDpv+TOBTsKoAl/D2klI8zSevadQCiGjqxXyN1 7Sy5SRr/Evu4o0jJGPVAgYBpgXKXgDswl3XmvbwR/c70dIHxtpblpjyF9ZiWrO9TCW17vXjLaDf Y8jZ9yObnwOTmIMIH8PSq4+0x5Ov3U+7Wx4th8+opDowCTsHscQ6F9uobwtEPeevMRaZsLe7JxU yMlMdsZl5BqlN8SxzuoEH41qaGsFBeeeAzzVx8gqeHVZdpJi6+mt 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-kselftest@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: 14021770 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 5CC381C6FE9 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-224341bbc1dso119940095ad.3 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=mNCcbUwjubN8eciiL46GR9DvBMcApLbXGzDlb91f+AJJzmQaQyAQ1HvYypNYyN7Sxf YHNWmJ6RNZMBGPVMuMgnxUlDT4sGMdptWByeltuvIl0cVliQxG5V/SQpN/fG7zB4DPdi uC73YJiQ/ER/t2fer/B4J/lJ4ua2z+2Ap6oFGNZDbZylQZenCy7Byov6EpLTuJ9nkw/7 rwj0GswpHEpMxLp6nm3kiZBDOWvMhFSr01DgvDZq6eJ96Qowh7lmPDg1p7BHGZVbGGEF VhCYoFC+sq7btl9Baj+7Li9hQ6wjxn0nxaehH6H37h1ClLJrcXGAjjZUnxAaTsCTD24Z 53nQ== X-Forwarded-Encrypted: i=1; AJvYcCWjmT/MJvtccJ5whla5qg/L+sXzcMc9YURc94WK+F/o7wxam9KPJoq8RB971hc++Eo8By7M2Qaa8c4FUIW3ZxU=@vger.kernel.org X-Gm-Message-State: AOJu0YzdmQ+ZjmE3lUtN9hiAWCge3dq+XlU6dP9R2bDMG7l46Ox8ujl6 3epi3VFXwEsKHTFysJ9ADbAVwUKgUYNTVJ4RQO86CZn8Cjq6m/j/Dvkz1p9pC00= X-Gm-Gg: ASbGncukKd+C5rb/730mJFUUv4Mjv8L0LUOgX7F5rPgZzBf51weS+fx5063XInws8P/ hM5YAdVhaVG8XSuLmVaUiK4zvd2iVh7qtSQoxED4TFIcF86ndJtSfjeKrGjAi26qKmenFRczO7U eERXad+NhOPBkRjgvRF0sY6vSUCDhPJ5ow1ozKIfL/HP75zpzvy+M8jalslr++EvQCdyjs25lWv Omw+NYfiKXxGfvk/+5J4HuJWIAv/XAqISpD9zUFXkYprpuB4dwmD6ESfI2TL2c3ED0A+21JWd4p 4SPH3m8eDu1QLjLFeKLYtF9DUn1YUC8LdzoGLko7ZK9kt6fUTZsc 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-kselftest@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: 14021771 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 0A1621CEADB for ; Wed, 19 Mar 2025 00:15:53 +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=1742343356; cv=none; b=l+zzAs+R1FMvMoqou8yNgEmZXzwjeUSIa38dL9ytfMOhCosXSDeX0uubK59q3nAR9dG4jLj6cZRkP0Y1RQAYZIGcTt3DM5ammYYK5FKDGo3V7Wn6VyYud6oA6w4V28AYf6J9/AbJZyWYWH6VRtHVCDhnWl+YCnsl+YBSOb3kcAg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742343356; c=relaxed/simple; bh=l6eI5FceV5Cykwuzpt3OkcP+LeKArrcDOklFOAM4Tzc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Lq5jxK7V8TnxCqe+69FKOSxFfFELXPapYVIO4FCiljh8sNGBlRRVf0gIya1TNw1I8sWvD7R+I2Pgbu9o4CIEd7y3DoPv5oQvhSuI3bJxFmQN+UZBW6tjIlaEjfdm1G9LEeWnSQ19cSZrwC1Y16r3PWADpjP74e9pDLXBS5ntWZ4= 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.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="vYT0YI/q" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-224100e9a5cso121496755ad.2 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=F6rnNbuCIGRFMzakejz3uDg/Lc8OWZGjz6tWQNQkUemYsnPYK+KHuX15XYObqcvRKc uhiYBw1XZ59VwzHXkLMekHWCAwQBY9HmSvYSn43PewWj0BfH7lxDratZt1QBrC2JAYtY VEy9UWEsVe3otmbDudn+JW82WOU5X79fR2HEeXTvfVrzyg2Y0mLotgWUrCOlzpCiIh9/ 6yt1DTDRsQL9WPxk4MYwFgXCHtOIdzghMampgRVwowQM+VIS7UIKbOktDaiJNIOuIiCO Ao+C3Q0yAmrT3/ghCP5FEc8mpcK9NkiODEoNpdI225qaQ1BTQDuy5BArmfg/ARPTAaSX wQrg== X-Forwarded-Encrypted: i=1; AJvYcCVGNgDNcMD/RIeDfEv0ZcL6NVMzJCtJvrl23khnNSMtBzabtYx7fT/24nsdnrSPXw4bOanHElVAPXThVvo2cKU=@vger.kernel.org X-Gm-Message-State: AOJu0YwCdVTje4Lb09wbL4B7SGi2GDiInAF6Jcn4HqjUyKQGN3TgsvcV kAAIoSkdtkS6rcCqu6owCGYvCchClBHS44zzGrVVM+4KHXNSaiWfryJEL1aZ844= X-Gm-Gg: ASbGncsaGNUUSSIe1a7rrxRo/fFdH02X4von+9tG75C7CYmnwXaVULAdWgsyUqCy135 sKtGfeLr6GDwiH1JXiejsUvPuA45iPwddNLMdqIqaQCkMoi3g6kPEFaGy066zsX5Fkts4vZup9z ek9AfAmzDhdUMqGhPbV39js3IoDkkkCK0O37+SLfg5i9NxYr8y91WOOnHEjzmgagnpAc0qouMNu jUKPaGGRUNjsLtztnxqcaMpHMCmAX+A0DeYk666Uzlay+gwNs0rpY1q9C1usaqKjz8VH4HsJaXm rHS7cRXNTj7XLf2IAXMmL0hab707/0Hn6ZYyMIex2JuCz49Qxx60DxjPlb/vDaI= 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-kselftest@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