Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Jun 2026 02:10:33 +0000
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: da6aa0648c02 - main - struct vnode: assign v_rl.resv1 as v_type and v_rl.resv2 as v_state
Message-ID:  <6a2e0d99.31088.3efc2315@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=da6aa0648c0265d6f7bcba44a26f13ed0453dd7a

commit da6aa0648c0265d6f7bcba44a26f13ed0453dd7a
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-04-26 02:31:50 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-06-14 02:02:38 +0000

    struct vnode: assign v_rl.resv1 as v_type and v_rl.resv2 as v_state
    
    Use the avaliable space to introduce vnode-locked flag v_v2flag.
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D56912
---
 sys/sys/rangelock.h |  4 ++++
 sys/sys/vnode.h     | 10 ++++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/sys/sys/rangelock.h b/sys/sys/rangelock.h
index ea3d0c26cd30..af0a2c3d72b1 100644
--- a/sys/sys/rangelock.h
+++ b/sys/sys/rangelock.h
@@ -46,6 +46,10 @@ struct rl_q_entry;
  * all existing lock owners are compatible with the request. Two lock
  * owners are compatible if their ranges do not overlap, or both
  * owners are for read.
+ *
+ * The resvX fields are there due to padding and explicitly enumerated
+ * so they can be used by consumers.  For instance, struct vnode uses
+ * resv1 as v_type and resv2 as v_state.
  */
 struct rangelock {
 	uintptr_t head;
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 99e90aa4187e..51def7a861ec 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -133,8 +133,7 @@ struct vnode {
 	 * Fields which define the identity of the vnode.  These fields are
 	 * owned by the filesystem (XXX: and vgone() ?)
 	 */
-	__enum_uint8(vtype) v_type;		/* u vnode type */
-	__enum_uint8(vstate) v_state;		/* u vnode state */
+	short	v_v2flag;			/* v frequently read flag */
 	short	v_irflag;			/* i frequently read flags */
 	seqc_t	v_seqc;				/* i modification count */
 	uint32_t v_nchash;			/* u namecache hash */
@@ -203,6 +202,12 @@ struct vnode {
 						   (negative) text users */
 	int	v_seqc_users;			/* i modifications pending */
 };
+/*
+	__enum_uint8(vtype) v_type;
+	__enum_uint8(vstate) v_state;
+*/
+#define	v_type	v_rl.resv1			/* u vnode type */
+#define	v_state	v_rl.resv2			/* u vnode state */
 
 #define VN_ISDEV(vp)		VTYPE_ISDEV((vp)->v_type)
 
@@ -237,6 +242,7 @@ _Static_assert(sizeof(struct vnode) <= 448, "vnode size crosses 448 bytes");
  *	VI flags are protected by interlock and live in v_iflag
  *	VIRF flags are protected by interlock and live in v_irflag
  *	VV flags are protected by the vnode lock and live in v_vflag
+ *	V2 flags are protected by the vnode lock and live in v_v2flag
  *
  *	VIRF_DOOMED is doubly protected by the interlock and vnode lock.  Both
  *	are required for writing but the status may be checked with either.


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a2e0d99.31088.3efc2315>