From nobody Tue Nov 28 17:33:22 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 4SfqLC27xPz52H0X; Tue, 28 Nov 2023 17:33:23 +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 4SfqLB74zqz4FcN; Tue, 28 Nov 2023 17:33:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1701192803; 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=1sDl4fqJMojPgVr7ThgcKK5BdfHA6L1iYbMCMH5394o=; b=SxAgK+Pl2g0Cck5GKsUklxTdPg1skot0M/1CtwHYKoto9LljE5Td7bd5queIdqyFdU5OeF yRDE8qqE9TLSSsiV5tt4ICXOjKC6po/UKbQ3BO00iYQluHJwLbqQ2Je0Gi61fQ+6+Bldli aGotEsxDh5R1SXb4N4nbZ2jmRuuuUdcwxYyyVdogkGJv7ycZfLLZ1GqCcctJxEwdS+Env7 I8iVKz9MR7cPVYOwBwkMIBPwIghU21uufhS4Nwbtvjo6Xtpde0eT8fsETl3ddTM6iSWDpk 9b43mVjzv2RYy2zGzIUyuYuD0/8oIz6bluOmZV4+WA9L2YqB5krybWz/+G9ywg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1701192803; 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=1sDl4fqJMojPgVr7ThgcKK5BdfHA6L1iYbMCMH5394o=; b=AeKPvnF/LKwA5EusLXM4NjuGEa6OlVrBb3YkaO6J4cHgbZaGAxQdAy5u7NJ9VtJ7vMIDiB /9mH6Chh4YXcr0nL2Ga435wRcggP5FYn2LAMlU7fxcofbU4QW2RpYXtk40Z+A1JUDtJC/9 lSo1PRr7/njN1uuOiDTMnhe+4/pphaOJUTsERT/rjeVmcUyWS8U66PI9emqdkIt2VrLyMx XvPyXDgWtradorqx1uQt/QmYZkTeq1AzY/DQ6uMdJ13UvEkYJhcqu9wCdi2fr9vOds4sxj H0C/LCw89YMipd5PYqlI//70S0BVt3vtvNut+9vziG+z7RcriJ+HSADBRJXlvw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1701192803; a=rsa-sha256; cv=none; b=hcO7NQfMRloGuXpXKTz0s50Ru4ooCYv21LhP6PYAnqcZxDu9t55DZJzR2w2xZ0XgmIWSlT JonczqvQSQshF7+gwz4JzH8fOKsSvmh0ie6gs/XtMCRoXX2kj0Eyvs6Kr9PHoMqBtPAx+W QrObswXQPeYScNB5a4VQZI/OwkRdqXFDXEyq6TuPuo24fkW1yFbRlOqR8PR1kIiR8Tki5p Uak1pgYva/0L52k/4yzz6mR6M0yQiY8J2D1D4apPdCgtWb+cx5l07/RFwvcR1IEwwER8we vLUgIuhkGT3otZwmGF/ZvAj3NufxaT7xbUnKEUZpqfWWDssy6EaC0u+HMaZ6OQ== 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 4SfqLB67lWzXDr; Tue, 28 Nov 2023 17:33:22 +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 3ASHXM7r028824; Tue, 28 Nov 2023 17:33:22 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3ASHXMcm028821; Tue, 28 Nov 2023 17:33:22 GMT (envelope-from git) Date: Tue, 28 Nov 2023 17:33:22 GMT Message-Id: <202311281733.3ASHXMcm028821@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 4cbe4c48a7e5 - main - VFS: add VOP_GETLOWVNODE() 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: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4cbe4c48a7e574ec1bb919351d7a57d252b00b62 Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=4cbe4c48a7e574ec1bb919351d7a57d252b00b62 commit 4cbe4c48a7e574ec1bb919351d7a57d252b00b62 Author: Konstantin Belousov AuthorDate: 2023-11-18 08:55:48 +0000 Commit: Konstantin Belousov CommitDate: 2023-11-28 17:32:53 +0000 VFS: add VOP_GETLOWVNODE() It is similar to VOP_GETWRITEMOUNT(), and for given vnode vp should return the lower vnode which would actually handle write to vp. Flags allow to specify FREAD or FWRITE for benefit of possible unionfs implementation. Reviewed by: markj, Olivier Certner Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D42603 --- sys/fs/nullfs/null_vnops.c | 18 ++++++++++++++++++ sys/kern/vfs_default.c | 10 ++++++++++ sys/kern/vnode_if.src | 7 +++++++ 3 files changed, 35 insertions(+) diff --git a/sys/fs/nullfs/null_vnops.c b/sys/fs/nullfs/null_vnops.c index 7607b44e36c3..c05e3394a9a6 100644 --- a/sys/fs/nullfs/null_vnops.c +++ b/sys/fs/nullfs/null_vnops.c @@ -1127,6 +1127,23 @@ null_vput_pair(struct vop_vput_pair_args *ap) return (res); } +static int +null_getlowvnode(struct vop_getlowvnode_args *ap) +{ + struct vnode *vp, *vpl; + + vp = ap->a_vp; + if (vn_lock(vp, LK_SHARED) != 0) + return (EBADF); + + vpl = NULLVPTOLOWERVP(vp); + vhold(vpl); + VOP_UNLOCK(vp); + VOP_GETLOWVNODE(vpl, ap->a_vplp, ap->a_flags); + vdrop(vpl); + return (0); +} + /* * Global vfs data structures */ @@ -1139,6 +1156,7 @@ struct vop_vector null_vnodeops = { .vop_bmap = VOP_EOPNOTSUPP, .vop_stat = null_stat, .vop_getattr = null_getattr, + .vop_getlowvnode = null_getlowvnode, .vop_getwritemount = null_getwritemount, .vop_inactive = null_inactive, .vop_need_inactive = null_need_inactive, diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c index a342cbb80c9c..67c7ace5f72f 100644 --- a/sys/kern/vfs_default.c +++ b/sys/kern/vfs_default.c @@ -82,6 +82,7 @@ static int vop_stdgetpages_async(struct vop_getpages_async_args *ap); static int vop_stdread_pgcache(struct vop_read_pgcache_args *ap); static int vop_stdstat(struct vop_stat_args *ap); static int vop_stdvput_pair(struct vop_vput_pair_args *ap); +static int vop_stdgetlowvnode(struct vop_getlowvnode_args *ap); /* * This vnode table stores what we want to do if the filesystem doesn't @@ -112,6 +113,7 @@ struct vop_vector default_vnodeops = { .vop_fsync = VOP_NULL, .vop_stat = vop_stdstat, .vop_fdatasync = vop_stdfdatasync, + .vop_getlowvnode = vop_stdgetlowvnode, .vop_getpages = vop_stdgetpages, .vop_getpages_async = vop_stdgetpages_async, .vop_getwritemount = vop_stdgetwritemount, @@ -1607,3 +1609,11 @@ vop_stdvput_pair(struct vop_vput_pair_args *ap) vput(vp); return (0); } + +static int +vop_stdgetlowvnode(struct vop_getlowvnode_args *ap) +{ + vref(ap->a_vp); + *ap->a_vplp = ap->a_vp; + return (0); +} diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src index c4051fdfe327..a2b6a7c8ff9f 100644 --- a/sys/kern/vnode_if.src +++ b/sys/kern/vnode_if.src @@ -468,6 +468,13 @@ vop_getwritemount { OUT struct mount **mpp; }; +%% getwritevnode vp = = = + +vop_getlowvnode { + IN struct vnode *vp; + OUT struct vnode **vplp; + IN int flags; +}; %% print vp - - -