Module Name:    src
Committed By:   hannken
Date:           Wed Jan 17 10:19:21 UTC 2024

Modified Files:
        src/sys/miscfs/procfs: procfs.h procfs_vfsops.c procfs_vnops.c

Log Message:
Add a hashmap to access all procfs nodes by pid.


To generate a diff of this commit:
cvs rdiff -u -r1.82 -r1.83 src/sys/miscfs/procfs/procfs.h
cvs rdiff -u -r1.111 -r1.112 src/sys/miscfs/procfs/procfs_vfsops.c
cvs rdiff -u -r1.229 -r1.230 src/sys/miscfs/procfs/procfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/miscfs/procfs/procfs.h
diff -u src/sys/miscfs/procfs/procfs.h:1.82 src/sys/miscfs/procfs/procfs.h:1.83
--- src/sys/miscfs/procfs/procfs.h:1.82	Wed Jan 19 10:23:00 2022
+++ src/sys/miscfs/procfs/procfs.h	Wed Jan 17 10:19:21 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: procfs.h,v 1.82 2022/01/19 10:23:00 martin Exp $	*/
+/*	$NetBSD: procfs.h,v 1.83 2024/01/17 10:19:21 hannken Exp $	*/
 
 /*
  * Copyright (c) 1993
@@ -129,7 +129,9 @@ struct pfskey {
 	int		pk_fd;		/* associated fd if not -1 */
 };
 struct pfsnode {
+	LIST_ENTRY(pfsnode) pfs_hash;	/* per pid hash list */
 	struct vnode	*pfs_vnode;	/* vnode associated with this pfsnode */
+	struct mount	*pfs_mount;	/* mount associated with this pfsnode */
 	struct pfskey	pfs_key;
 #define pfs_type pfs_key.pk_type
 #define pfs_pid pfs_key.pk_pid
@@ -269,6 +271,7 @@ int procfs_doauxv(struct lwp *, struct p
 int procfs_dolimit(struct lwp *, struct proc *, struct pfsnode *,
     struct uio *);
 
+void procfs_hashrem(struct pfsnode *);
 void procfs_revoke_vnodes(struct proc *, void *);
 int procfs_getfp(struct pfsnode *, struct proc *, struct file **);
 

Index: src/sys/miscfs/procfs/procfs_vfsops.c
diff -u src/sys/miscfs/procfs/procfs_vfsops.c:1.111 src/sys/miscfs/procfs/procfs_vfsops.c:1.112
--- src/sys/miscfs/procfs/procfs_vfsops.c:1.111	Mon Jan 17 11:20:00 2022
+++ src/sys/miscfs/procfs/procfs_vfsops.c	Wed Jan 17 10:19:21 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: procfs_vfsops.c,v 1.111 2022/01/17 11:20:00 bouyer Exp $	*/
+/*	$NetBSD: procfs_vfsops.c,v 1.112 2024/01/17 10:19:21 hannken Exp $	*/
 
 /*
  * Copyright (c) 1993
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_vfsops.c,v 1.111 2022/01/17 11:20:00 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_vfsops.c,v 1.112 2024/01/17 10:19:21 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -110,7 +110,29 @@ MODULE(MODULE_CLASS_VFS, procfs, "ptrace
 
 VFS_PROTOS(procfs);
 
+#define PROCFS_HASHSIZE	256
+
 static kauth_listener_t procfs_listener;
+LIST_HEAD(hashhead, pfsnode);
+static u_long procfs_hashmask;
+static struct hashhead *procfs_hashtab;
+static kmutex_t procfs_hashlock;
+
+static struct hashhead *
+procfs_hashhead(pid_t pid)
+{
+
+	return &procfs_hashtab[pid & procfs_hashmask];
+}
+
+void
+procfs_hashrem(struct pfsnode *pfs)
+{
+
+	mutex_enter(&procfs_hashlock);
+	LIST_REMOVE(pfs, pfs_hash);
+	mutex_exit(&procfs_hashlock);
+}
 
 /*
  * VFS Operations.
@@ -279,6 +301,7 @@ procfs_loadvnode(struct mount *mp, struc
 	pfs->pfs_type = pfskey.pk_type;
 	pfs->pfs_fd = pfskey.pk_fd;
 	pfs->pfs_vnode = vp;
+	pfs->pfs_mount = mp;
 	pfs->pfs_flags = 0;
 	pfs->pfs_fileno =
 	    PROCFS_FILENO(pfs->pfs_pid, pfs->pfs_type, pfs->pfs_fd);
@@ -421,6 +444,10 @@ procfs_loadvnode(struct mount *mp, struc
 		panic("procfs_allocvp");
 	}
 
+	mutex_enter(&procfs_hashlock);
+	LIST_INSERT_HEAD(procfs_hashhead(pfs->pfs_pid), pfs, pfs_hash);
+	mutex_exit(&procfs_hashlock);
+
 	uvm_vnp_setsize(vp, 0);
 	*new_key = &pfs->pfs_key;
 

Index: src/sys/miscfs/procfs/procfs_vnops.c
diff -u src/sys/miscfs/procfs/procfs_vnops.c:1.229 src/sys/miscfs/procfs/procfs_vnops.c:1.230
--- src/sys/miscfs/procfs/procfs_vnops.c:1.229	Fri Jun 17 14:30:37 2022
+++ src/sys/miscfs/procfs/procfs_vnops.c	Wed Jan 17 10:19:21 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: procfs_vnops.c,v 1.229 2022/06/17 14:30:37 shm Exp $	*/
+/*	$NetBSD: procfs_vnops.c,v 1.230 2024/01/17 10:19:21 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008, 2020 The NetBSD Foundation, Inc.
@@ -105,7 +105,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.229 2022/06/17 14:30:37 shm Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.230 2024/01/17 10:19:21 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -437,6 +437,7 @@ procfs_reclaim(void *v)
 	mutex_enter(vp->v_interlock);
 	vp->v_data = NULL;
 	mutex_exit(vp->v_interlock);
+	procfs_hashrem(pfs);
 	kmem_free(pfs, sizeof(*pfs));
 	return 0;
 }

Reply via email to