aboutsummaryrefslogtreecommitdiff
path: root/sys/fs/pseudofs/pseudofs_fileno.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fs/pseudofs/pseudofs_fileno.c')
-rw-r--r--sys/fs/pseudofs/pseudofs_fileno.c38
1 files changed, 14 insertions, 24 deletions
diff --git a/sys/fs/pseudofs/pseudofs_fileno.c b/sys/fs/pseudofs/pseudofs_fileno.c
index 10c1617ad17c..155b0f51d38f 100644
--- a/sys/fs/pseudofs/pseudofs_fileno.c
+++ b/sys/fs/pseudofs/pseudofs_fileno.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/mutex.h>
+#include <sys/proc.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
@@ -50,12 +51,10 @@ __FBSDID("$FreeBSD$");
void
pfs_fileno_init(struct pfs_info *pi)
{
- struct unrhdr *up;
- up = new_unrhdr(3, INT_MAX, &pi->pi_mutex);
- mtx_lock(&pi->pi_mutex);
- pi->pi_unrhdr = up;
- mtx_unlock(&pi->pi_mutex);
+ mtx_assert(&Giant, MA_OWNED);
+ mtx_init(&pi->pi_mutex, "pfs_fileno", NULL, MTX_DEF);
+ pi->pi_unrhdr = new_unrhdr(3, INT_MAX / NO_PID, &pi->pi_mutex);
}
/*
@@ -64,30 +63,23 @@ pfs_fileno_init(struct pfs_info *pi)
void
pfs_fileno_uninit(struct pfs_info *pi)
{
- struct unrhdr *up;
- mtx_lock(&pi->pi_mutex);
-
- up = pi->pi_unrhdr;
+ mtx_assert(&Giant, MA_OWNED);
+ delete_unrhdr(pi->pi_unrhdr);
pi->pi_unrhdr = NULL;
-
- mtx_unlock(&pi->pi_mutex);
-
- delete_unrhdr(up);
+ mtx_destroy(&pi->pi_mutex);
}
/*
* Allocate a file number
*/
void
-pfs_fileno_alloc(struct pfs_info *pi, struct pfs_node *pn)
+pfs_fileno_alloc(struct pfs_node *pn)
{
- /* pi is not really necessary as it can be derived */
- KASSERT(pi == pn->pn_info, ("pn / pi mismatch"));
/* make sure our parent has a file number */
if (pn->pn_parent && !pn->pn_parent->pn_fileno)
- pfs_fileno_alloc(pi, pn->pn_parent);
+ pfs_fileno_alloc(pn->pn_parent);
switch (pn->pn_type) {
case pfstype_root:
@@ -98,7 +90,7 @@ pfs_fileno_alloc(struct pfs_info *pi, struct pfs_node *pn)
case pfstype_file:
case pfstype_symlink:
case pfstype_procdir:
- pn->pn_fileno = alloc_unr(pi->pi_unrhdr);
+ pn->pn_fileno = alloc_unr(pn->pn_info->pi_unrhdr);
break;
case pfstype_this:
KASSERT(pn->pn_parent != NULL,
@@ -108,7 +100,7 @@ pfs_fileno_alloc(struct pfs_info *pi, struct pfs_node *pn)
case pfstype_parent:
KASSERT(pn->pn_parent != NULL,
("pfstype_parent node has no parent"));
- if (pn->pn_parent == pi->pi_root) {
+ if (pn->pn_parent == pn->pn_info->pi_root) {
pn->pn_fileno = pn->pn_parent->pn_fileno;
break;
}
@@ -123,7 +115,7 @@ pfs_fileno_alloc(struct pfs_info *pi, struct pfs_node *pn)
}
#if 0
- printf("pfs_fileno_alloc(): %s: ", pi->pi_name);
+ printf("pfs_fileno_alloc(): %s: ", pn->pn_info->pi_name);
if (pn->pn_parent) {
if (pn->pn_parent->pn_parent) {
printf("%s/", pn->pn_parent->pn_parent->pn_name);
@@ -138,10 +130,8 @@ pfs_fileno_alloc(struct pfs_info *pi, struct pfs_node *pn)
* Release a file number
*/
void
-pfs_fileno_free(struct pfs_info *pi, struct pfs_node *pn)
+pfs_fileno_free(struct pfs_node *pn)
{
- /* pi is not really necessary as it can be derived */
- KASSERT(pi == pn->pn_info, ("pn / pi mismatch"));
switch (pn->pn_type) {
case pfstype_root:
@@ -151,7 +141,7 @@ pfs_fileno_free(struct pfs_info *pi, struct pfs_node *pn)
case pfstype_file:
case pfstype_symlink:
case pfstype_procdir:
- free_unr(pi->pi_unrhdr, pn->pn_fileno);
+ free_unr(pn->pn_info->pi_unrhdr, pn->pn_fileno);
break;
case pfstype_this:
case pfstype_parent: