Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/devfs/devfs_devs.c
Show First 20 Lines • Show All 56 Lines • ▼ Show 20 Lines | |||||
struct cdev_priv_list cdevp_list = TAILQ_HEAD_INITIALIZER(cdevp_list); | struct cdev_priv_list cdevp_list = TAILQ_HEAD_INITIALIZER(cdevp_list); | ||||
struct unrhdr *devfs_inos; | struct unrhdr *devfs_inos; | ||||
static MALLOC_DEFINE(M_DEVFS2, "DEVFS2", "DEVFS data 2"); | static MALLOC_DEFINE(M_DEVFS2, "DEVFS2", "DEVFS data 2"); | ||||
static MALLOC_DEFINE(M_DEVFS3, "DEVFS3", "DEVFS data 3"); | static MALLOC_DEFINE(M_DEVFS3, "DEVFS3", "DEVFS data 3"); | ||||
static MALLOC_DEFINE(M_CDEVP, "DEVFS1", "DEVFS cdev_priv storage"); | static MALLOC_DEFINE(M_CDEVP, "DEVFS1", "DEVFS cdev_priv storage"); | ||||
MALLOC_DEFINE(M_CDEV_VP, "DEVFS4", "DEVFS vnode tables"); | |||||
SYSCTL_NODE(_vfs, OID_AUTO, devfs, CTLFLAG_RW, 0, "DEVFS filesystem"); | SYSCTL_NODE(_vfs, OID_AUTO, devfs, CTLFLAG_RW, 0, "DEVFS filesystem"); | ||||
static unsigned devfs_generation; | static unsigned devfs_generation; | ||||
SYSCTL_UINT(_vfs_devfs, OID_AUTO, generation, CTLFLAG_RD, | SYSCTL_UINT(_vfs_devfs, OID_AUTO, generation, CTLFLAG_RD, | ||||
&devfs_generation, 0, "DEVFS generation number"); | &devfs_generation, 0, "DEVFS generation number"); | ||||
unsigned devfs_rule_depth = 1; | unsigned devfs_rule_depth = 1; | ||||
▲ Show 20 Lines • Show All 66 Lines • ▼ Show 20 Lines | if (cdp == NULL) | ||||
return (NULL); | return (NULL); | ||||
cdp->cdp_dirents = &cdp->cdp_dirent0; | cdp->cdp_dirents = &cdp->cdp_dirent0; | ||||
cdev = &cdp->cdp_c; | cdev = &cdp->cdp_c; | ||||
LIST_INIT(&cdev->si_children); | LIST_INIT(&cdev->si_children); | ||||
vfs_timestamp(&ts); | vfs_timestamp(&ts); | ||||
cdev->si_atime = cdev->si_mtime = cdev->si_ctime = ts; | cdev->si_atime = cdev->si_mtime = cdev->si_ctime = ts; | ||||
cdev->si_vnodes = (void *)&cdev->si_vnodes_local; | |||||
cdev->si_vnodes_size = nitems(cdev->si_vnodes_local); | |||||
return (cdev); | return (cdev); | ||||
} | } | ||||
int | int | ||||
devfs_dev_exists(const char *name) | devfs_dev_exists(const char *name) | ||||
{ | { | ||||
struct cdev_priv *cdp; | struct cdev_priv *cdp; | ||||
Show All 13 Lines | devfs_dev_exists(const char *name) | ||||
return (0); | return (0); | ||||
} | } | ||||
void | void | ||||
devfs_free(struct cdev *cdev) | devfs_free(struct cdev *cdev) | ||||
{ | { | ||||
struct cdev_priv *cdp; | struct cdev_priv *cdp; | ||||
#ifdef INVARIANTS | |||||
int i; | |||||
#endif | |||||
cdp = cdev2priv(cdev); | cdp = cdev2priv(cdev); | ||||
if (cdev->si_cred != NULL) | if (cdev->si_cred != NULL) | ||||
crfree(cdev->si_cred); | crfree(cdev->si_cred); | ||||
devfs_free_cdp_inode(cdp->cdp_inode); | devfs_free_cdp_inode(cdp->cdp_inode); | ||||
if (cdp->cdp_maxdirent > 0) | if (cdp->cdp_maxdirent > 0) | ||||
free(cdp->cdp_dirents, M_DEVFS2); | free(cdp->cdp_dirents, M_DEVFS2); | ||||
KASSERT(cdev->si_vnodes_assigned == 0, ("%s: cdev %p still has " | |||||
"vnodes %d assigned", __func__, cdev, cdev->si_vnodes_assigned)); | |||||
#ifdef INVARIANTS | |||||
for (i = 0; i < cdev->si_vnodes_size; i++) { | |||||
if (cdev->si_vnodes[i] != NULL) { | |||||
printf("%s: cdev %p non-NULL entry at %d\n", __func__, | |||||
cdev, i); | |||||
} | |||||
} | |||||
#endif | |||||
if (cdev->si_vnodes != (void *)&cdev->si_vnodes_local) | |||||
free(cdev->si_vnodes, M_CDEV_VP); | |||||
free(cdp, M_CDEVP); | free(cdp, M_CDEVP); | ||||
} | } | ||||
struct devfs_dirent * | struct devfs_dirent * | ||||
devfs_find(struct devfs_dirent *dd, const char *name, int namelen, int type) | devfs_find(struct devfs_dirent *dd, const char *name, int namelen, int type) | ||||
{ | { | ||||
struct devfs_dirent *de; | struct devfs_dirent *de; | ||||
▲ Show 20 Lines • Show All 551 Lines • Show Last 20 Lines |