aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_descrip.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_descrip.c')
-rw-r--r--sys/kern/kern_descrip.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index 23b7d5489e53..a74d27f62040 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -3157,6 +3157,30 @@ filedesc_to_leader_alloc(struct filedesc_to_leader *old, struct filedesc *fdp, s
return (fdtol);
}
+static int
+sysctl_kern_proc_nfds(SYSCTL_HANDLER_ARGS)
+{
+ struct filedesc *fdp;
+ int i, count, slots;
+
+ if (*(int *)arg1 != 0)
+ return (EINVAL);
+
+ fdp = curproc->p_fd;
+ count = 0;
+ FILEDESC_SLOCK(fdp);
+ slots = NDSLOTS(fdp->fd_lastfile + 1);
+ for (i = 0; i < slots; i++)
+ count += bitcountl(fdp->fd_map[i]);
+ FILEDESC_SUNLOCK(fdp);
+
+ return (SYSCTL_OUT(req, &count, sizeof(count)));
+}
+
+static SYSCTL_NODE(_kern_proc, KERN_PROC_NFDS, nfds,
+ CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_kern_proc_nfds,
+ "Number of open file descriptors");
+
/*
* Get file structures globally.
*/