From nobody Sat Jul 8 19:52:00 2023 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Qz1B83fCHz4mHvn; Sat, 8 Jul 2023 19:52:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Qz1B83DLDz3LYD; Sat, 8 Jul 2023 19:52:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1688845920; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=7DwaAr4vDgr7n2Hy2ZomCwmQT2xvxUbJ+ExY7LHACzI=; b=LCpW/yz6zCQfBBsVt72u8cl3vmJAxf4Nr1nvI7Jl3csDmVit4JbLnQi54J880+wEufeNRv 3oy1RlirMai0iAB/65GcFO4+iaRyO1dB4egJdITRXlXB9mGUiQv9mJc3GdAIUeazIH6Kna 4vAoNF+MURQDLXvus1kdCKYsg0UzzbJZexph+DZ5vmybKzbIWRvS6UM8vRQ9sJoHtDmjB7 NEHvCSAOKnZ6L75bxz+WDryLG2BZLkn49D2/tNFMSJs9KViGwhgRGAKBTIiaTXwcABRj9x XgogUkvuHqooj45VBz78N5wCgbj5Jhmh/mjltBo7UYslqECFqHakW/W+fiMY0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1688845920; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=7DwaAr4vDgr7n2Hy2ZomCwmQT2xvxUbJ+ExY7LHACzI=; b=TXSyZC59ev0k9tDyr6BNTCjzKKDB0wXWadWGBYs8djhVUTgOMRx8kg0FvY/gZ6mwqkXVO+ 6xcCk0AsC5qrt7+2KWYORwdJ/lHmjyKk0XM443MQxm1ELHQcqbqQ1EL9g8/oclapN6GjXH qdylcwxU77WkdDw2Yjxj2f4PSobbAYEhXOWzIkgsKI8lPX1xEf0dbRQT7lI4nJHfUST2J+ 91tgpo8kEM66PI2IhDONzoe2i3b+0KNpvo/3jH/wW+c3QmutmHC5jJLldJSisWyVb52Um+ LCEA5gUwmMqcd1U/dA36NrlBTVQtLntZjjByWzexAayK3K2Hs6AobotoZjT2KQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1688845920; a=rsa-sha256; cv=none; b=gxEOA1Nh60XZGZF+gjp5jKZT/nftz7KORqZrr3KlrlMCPgRa6ETDCG/u3WmG3JS087QEqx CSZB4lcsVSQgC4qtiiQMqoK94QiRqa6JChBpN09ALNGBEf1b+SSPM902WT41x+gNJHHZuL Za9apcmmieYZdT1JhTvXQNaNjIUVj8VsOkjgTKO/X27hs2SwGVdXiwnpt7PFsdmaBz8ws4 pEpcsMXRVG1kAKa8aXk8/LxIbgZGIFGqEFl2LVd0uvK+ONtpCC1IVfz9R92udgZLjMwv5d 5CtZ26JderHt3W341tS6EG8w+Zl6yYevkXlOhTPXkDBJVyaBPqWB0MPZlMKW+A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Qz1B82HZqzYdN; Sat, 8 Jul 2023 19:52:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 368Jq0jp092039; Sat, 8 Jul 2023 19:52:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 368Jq0UH092038; Sat, 8 Jul 2023 19:52:00 GMT (envelope-from git) Date: Sat, 8 Jul 2023 19:52:00 GMT Message-Id: <202307081952.368Jq0UH092038@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Martin Matuska Subject: git: 8113cc827611 - main - cat: use copy_file_range(2) with fallback to previous behavior List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mm X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8113cc827611a88540736c92ced7d3a7020a1723 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by mm: URL: https://cgit.FreeBSD.org/src/commit/?id=8113cc827611a88540736c92ced7d3a7020a1723 commit 8113cc827611a88540736c92ced7d3a7020a1723 Author: Martin Matuska AuthorDate: 2023-07-08 18:31:38 +0000 Commit: Martin Matuska CommitDate: 2023-07-08 19:51:15 +0000 cat: use copy_file_range(2) with fallback to previous behavior This allows to use special filesystem features like server-side copying on NFS 4.2 or block cloning on OpenZFS 2.2. Reviewed by: imp, rmacklem Differential revision: https://reviews.freebsd.org/D40882 --- bin/cat/cat.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/bin/cat/cat.c b/bin/cat/cat.c index a58bbe93835e..1158a839cfd8 100644 --- a/bin/cat/cat.c +++ b/bin/cat/cat.c @@ -83,6 +83,7 @@ static void usage(void) __dead2; static void scanfiles(char *argv[], int cooked); #ifndef BOOTSTRAP_CAT static void cook_cat(FILE *); +static ssize_t in_kernel_copy(int); #endif static void raw_cat(int); @@ -280,7 +281,16 @@ scanfiles(char *argv[], int cooked __unused) } #endif } else { +#ifndef BOOTSTRAP_CAT + if (in_kernel_copy(fd) == -1) { + if (errno == EINVAL) + raw_cat(fd); + else + err(1, "stdout"); + } +#else raw_cat(fd); +#endif if (fd != STDIN_FILENO) close(fd); } @@ -380,6 +390,21 @@ ilseq: if (ferror(stdout)) err(1, "stdout"); } + +static ssize_t +in_kernel_copy(int rfd) +{ + int wfd; + ssize_t ret; + + wfd = fileno(stdout); + ret = 1; + + while (ret > 0) + ret = copy_file_range(rfd, NULL, wfd, NULL, SSIZE_MAX, 0); + + return (ret); +} #endif /* BOOTSTRAP_CAT */ static void