diff options
Diffstat (limited to 'sys/fs/pseudofs/pseudofs_fileno.c')
| -rw-r--r-- | sys/fs/pseudofs/pseudofs_fileno.c | 38 |
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: |
