void pfs_purge(struct pfs_node *pn) { mtx_lock(&pfs_vncache_mutex); pfs_purge_locked(pn); mtx_unlock(&pfs_vncache_mutex); }
/* * Tear down vnode cache */ void pfs_vncache_unload(void) { EVENTHANDLER_DEREGISTER(process_exit, pfs_exit_tag); mtx_lock(&pfs_vncache_mutex); pfs_purge_locked(NULL, true); mtx_unlock(&pfs_vncache_mutex); KASSERT(pfs_vncache_entries == 0, ("%d vncache entries remaining", pfs_vncache_entries)); mtx_destroy(&pfs_vncache_mutex); }
/* * Free all vnodes associated with a defunct process */ static void pfs_exit(void *arg, struct proc *p) { struct pfs_vdata *pvd; int dead; if (pfs_vncache == NULL) return; mtx_lock(&pfs_vncache_mutex); for (pvd = pfs_vncache, dead = 0; pvd != NULL; pvd = pvd->pvd_next) if (pvd->pvd_pid == p->p_pid) dead = pvd->pvd_dead = 1; if (dead) pfs_purge_locked(NULL); mtx_unlock(&pfs_vncache_mutex); }