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;
}