From nobody Wed Nov 29 10:58:25 2023 X-Original-To: dev-commits-src-all@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 4SgGX15vqGz52X42; Wed, 29 Nov 2023 10:58:25 +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 4SgGX15MYxz3dSc; Wed, 29 Nov 2023 10:58:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1701255505; 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=PdixdsXm5ORtEQ0GfmUSKAYgiv4JqlKwQ1Mfl2iPC8k=; b=JrWJuyxCi+VzL56qHQE97NLiMYG0+MGegHmuE9ZdYu+dSvbVKknljzQZeeMZu4zxoFwWVw PZbbXin1qRb6YDkatrvAQDkspMrMwd8lRJxx3Bb7zz3mvmIDDOmY27+GBtMROzFl0ar2mw 40iIdNMqSVICzw/pJmtC9a+nnVl6ECAGty+zQNVkIwhe3cJBRJbibeHS1HUusus17TERsk 7B0ze3Zbcf5TtTAeLFLiBuN9h6UFHh9sqmUFr3+Lxt96iH9Wxm+MIuScjCpsdC1Brkap5j XR7VTQ08zunXExyFRPQRYhcGfosFnktocwaToYo1P14xm7TrWSXuzv7zBQzRYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1701255505; 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=PdixdsXm5ORtEQ0GfmUSKAYgiv4JqlKwQ1Mfl2iPC8k=; b=x1emEfQJ1qnYe2kg3/pruc3y6kng+8RtC6gQFgsDXsIDQqqubFJ4iKJRIiowy5TaU1X2oQ 6YQYnOJ+bc9Li0KynwEOb6dZCrIXCp9JUwV2GTCel7PETTTXWixspT5cQ8IiLb7nZhaNXp Uj3MDuosWSgO2TVgKovRIWX+eOSN9n1e/ihS5L0PegoeLeQDIuBLj35ekj6x2+iBmlc8yQ u86+K7u3JoKirbDpyoGWi9yGGyaxVm4M9cO/NUK6w4qpRL/AblkbVu8le7ogWJY5aXArKb imeAExq32Li2UvEa+ID0dC0hdNEw7569jtaLrTBnWvOaD0sAz8u1syUSZipG5Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1701255505; a=rsa-sha256; cv=none; b=GAC4Ld8F6Yz6ORPxf7RCIwL7MguoHK0bhDLfR1+sTqgTpjhayU21D3XvIrgHQ20ombXo4e nmf6iwmhn+S6InFVvWLlVB8Cfojlvby/kQsA8ngYwMq29v4agfa8v6w5qPdXJdCbQtJBsl 0xmYD0oLwnfW3FoJKKMxFN6TpsUqIdtRBxmRIOk4M5QNkRLaO1MMLJpsMOCAmJbc3s7kvy RC30fg56ZSrZVaNRjK8V1ZfrKcJLtOJAH63u61gbqiv08922xmnboYdCQcIZXAkHkv/IKu zo6csqxq+E9VCSmzAzFqX2HMcHDaO5adQ8kYBqO/tF2G1OC90t00eSsXM87rlg== 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 4SgGX14QYbz12g2; Wed, 29 Nov 2023 10:58:25 +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 3ATAwPG0067429; Wed, 29 Nov 2023 10:58:25 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3ATAwPos067426; Wed, 29 Nov 2023 10:58:25 GMT (envelope-from git) Date: Wed, 29 Nov 2023 10:58:25 GMT Message-Id: <202311291058.3ATAwPos067426@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Mateusz Guzik Subject: git: 746b0f70a229 - stable/14 - vfs: dodge locking for lseek(fd, 0, SEEK_CUR) List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mjg X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 746b0f70a229586b28a2e74eb940cd8854f361e6 Auto-Submitted: auto-generated The branch stable/14 has been updated by mjg: URL: https://cgit.FreeBSD.org/src/commit/?id=746b0f70a229586b28a2e74eb940cd8854f361e6 commit 746b0f70a229586b28a2e74eb940cd8854f361e6 Author: Mateusz Guzik AuthorDate: 2023-11-19 22:23:20 +0000 Commit: Mateusz Guzik CommitDate: 2023-11-29 10:58:16 +0000 vfs: dodge locking for lseek(fd, 0, SEEK_CUR) It is very common and according to dtrace while running poudriere almost all calls with SEEK_CUR pass 0. (cherry picked from commit 305a2676ae93fb50a623024d51039415521cb2da) --- sys/kern/vfs_vnops.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index f81516608eeb..4669296750e4 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -828,6 +828,13 @@ foffset_unlock(struct file *fp, off_t val, int flags) sleepq_broadcast(&fp->f_vnread_flags, SLEEPQ_SLEEP, 0, 0); sleepq_release(&fp->f_vnread_flags); } + +static off_t +foffset_read(struct file *fp) +{ + + return (atomic_load_long(&fp->f_offset)); +} #else off_t foffset_lock(struct file *fp, int flags) @@ -876,6 +883,13 @@ foffset_unlock(struct file *fp, off_t val, int flags) } mtx_unlock(mtxp); } + +static off_t +foffset_read(struct file *fp) +{ + + return (foffset_lock(fp, FOF_NOLOCK)); +} #endif void @@ -2647,8 +2661,19 @@ vn_seek(struct file *fp, off_t offset, int whence, struct thread *td) cred = td->td_ucred; vp = fp->f_vnode; - foffset = foffset_lock(fp, 0); noneg = (vp->v_type != VCHR); + /* + * Try to dodge locking for common case of querying the offset. + */ + if (whence == L_INCR && offset == 0) { + foffset = foffset_read(fp); + if (__predict_false(foffset < 0 && noneg)) { + return (EOVERFLOW); + } + td->td_uretoff.tdu_off = foffset; + return (0); + } + foffset = foffset_lock(fp, 0); error = 0; switch (whence) { case L_INCR: