Lines Matching defs:dnp

290 	devnode_t *	dnp = NULL;
337 dnp = dirent_p->de_dnp;
338 if (dnp->dn_type != DEV_DIR) {
352 dnp = dirent_p->de_dnp;
357 dnp, fullpath);
361 dirnode = dnp; /* continue relative to this directory */
378 devnode_t * dnp, devdirent_t * *dirent_pp)
407 if(dirnode && ( dnp->dn_dvm == NULL)) {
408 dnp->dn_dvm = dirnode->dn_dvm;
409 /* if(!dnp->dn_dvm) printf("parent had null dvm "); */
417 dirent_p->de_dnp = dnp;
418 dnp->dn_links++ ; /* implicit from our own name-node */
424 if(dnp->dn_linklist) {
425 dirent_p->de_nextlink = dnp->dn_linklist;
433 dnp->dn_linklist = dirent_p;
440 if(dnp->dn_type == DEV_DIR) {
441 dnp->dn_typeinfo.Dir.myname = dirent_p;
448 if(dnp->dn_typeinfo.Dir.parent) {
449 dnp->dn_typeinfo.Dir.parent->dn_links--;
452 dnp->dn_typeinfo.Dir.parent = dirnode;
454 dnp->dn_typeinfo.Dir.parent = dnp;
456 dnp->dn_typeinfo.Dir.parent->dn_links++; /* account for the new '..' */
509 devnode_t * dnp = NULL;
517 dnp = proto->dn_nextsibling;
518 while( dnp != proto) {
519 if (dnp->dn_dvm == dvm) {
520 *dn_pp = dnp;
523 dnp = dnp->dn_nextsibling;
538 MALLOC(dnp, devnode_t *, sizeof(devnode_t), M_DEVFSNODE, M_WAITOK);
539 if (!dnp) {
548 bcopy(proto, dnp, sizeof(devnode_t));
549 dnp->dn_links = 0;
550 dnp->dn_linklist = NULL;
551 dnp->dn_vn = NULL;
552 dnp->dn_len = 0;
554 dnp->dn_prevsiblingp = proto->dn_prevsiblingp;
555 *(dnp->dn_prevsiblingp) = dnp;
556 dnp->dn_nextsibling = proto;
557 proto->dn_prevsiblingp = &(dnp->dn_nextsibling);
559 mac_devfs_label_init(dnp);
560 mac_devfs_label_copy(proto->dn_label, dnp->dn_label);
569 bzero(dnp, sizeof(devnode_t));
570 dnp->dn_type = entrytype;
571 dnp->dn_nextsibling = dnp;
572 dnp->dn_prevsiblingp = &(dnp->dn_nextsibling);
573 dnp->dn_atime.tv_sec = tv.tv_sec;
574 dnp->dn_mtime.tv_sec = tv.tv_sec;
575 dnp->dn_ctime.tv_sec = tv.tv_sec;
577 mac_devfs_label_init(dnp);
580 dnp->dn_dvm = dvm;
581 dnp->dn_refcount = 0;
582 dnp->dn_ino = devfs_unique_fileno;
594 dnp->dn_typeinfo.Dir.dirlast = &(dnp->dn_typeinfo.Dir.dirlist);
595 dnp->dn_typeinfo.Dir.dirlist = (devdirent_t *)0;
596 dnp->dn_typeinfo.Dir.entrycount = 0;
598 dnp->dn_typeinfo.Dir.parent = NULL;
599 dnp->dn_links++; /* for .*/
600 dnp->dn_typeinfo.Dir.myname = NULL;
605 dnp->dn_ops = &devfs_vnodeop_p;
606 dnp->dn_mode |= 0555; /* default perms */
617 MALLOC(dnp->dn_typeinfo.Slnk.name, char *,
620 if (!dnp->dn_typeinfo.Slnk.name) {
621 FREE(dnp,M_DEVFSNODE);
624 strlcpy(dnp->dn_typeinfo.Slnk.name, typeinfo->Slnk.name,
626 dnp->dn_typeinfo.Slnk.namelen = typeinfo->Slnk.namelen;
627 DEVFS_INCR_STRINGSPACE(dnp->dn_typeinfo.Slnk.namelen + 1);
628 dnp->dn_ops = &devfs_vnodeop_p;
629 dnp->dn_mode |= 0555; /* default perms */
637 dnp->dn_ops = &devfs_spec_vnodeop_p;
638 dnp->dn_typeinfo.dev = typeinfo->dev;
644 dnp->dn_ops = &devfs_devfd_vnodeop_p;
645 dnp->dn_mode |= 0555; /* default perms */
653 *dn_pp = dnp;
663 devnode_free(devnode_t * dnp)
666 mac_devfs_label_destroy(dnp);
668 if (dnp->dn_type == DEV_SLNK) {
669 DEVFS_DECR_STRINGSPACE(dnp->dn_typeinfo.Slnk.namelen + 1);
670 FREE(dnp->dn_typeinfo.Slnk.name, M_DEVFSNODE);
673 FREE(dnp, M_DEVFSNODE);
681 devfs_dn_free(devnode_t * dnp)
683 if(--dnp->dn_links <= 0 ) /* can be -1 for initial free, on error */
686 if (dnp->dn_nextsibling != dnp) {
687 devnode_t * * prevp = dnp->dn_prevsiblingp;
688 *prevp = dnp->dn_nextsibling;
689 dnp->dn_nextsibling->dn_prevsiblingp = prevp;
694 if (dnp->dn_refcount == 0) {
695 devnode_free(dnp);
698 dnp->dn_lflags |= DN_DELETE;
727 devnode_t * dnp = child->de_dnp;
733 events = (dnp->dn_type == DEV_DIR ? VNODE_EVENT_DIR_CREATED : VNODE_EVENT_FILE_CREATED);
751 NULL, dnp, adnp->dn_dvm,
775 remove_notify_count(devnode_t *dnp)
785 notify_count += dnp->dn_links;
786 for (dnp2 = dnp->dn_nextsibling; dnp2 != dnp; dnp2 = dnp2->dn_nextsibling) {
807 devnode_t * dnp = ((devdirent_t *)dirent_p)->de_dnp;
823 log_count = remove_notify_count(dnp);
835 new_count = remove_notify_count(dnp);
851 devfs_record_event(&event_log, dnp, VNODE_EVENT_DELETE);
855 while ((dnp2 = dnp->dn_nextsibling) != dnp) {
860 dnp->dn_nextsibling = dnp2->dn_nextsibling;
861 dnp->dn_nextsibling->dn_prevsiblingp = &(dnp->dn_nextsibling);
887 if (dnp->dn_linklist) {
889 lastlink = (1 == dnp->dn_links);
892 devfs_record_event(&event_log, dnp->dn_linklist->de_parent, VNODE_EVENT_FILE_REMOVED);
894 dev_free_name(dnp->dn_linklist);
974 devnode_t * dnp = back->de_dnp;
975 int type = dnp->dn_type;
982 NULL, dnp,
1021 * can handle if there is no dnp
1030 devnode_t * dnp = dirent_p->de_dnp;
1032 if(dnp) {
1033 if(dnp->dn_type == DEV_DIR)
1037 if(dnp->dn_typeinfo.Dir.dirlist)
1039 p = dnp->dn_typeinfo.Dir.parent;
1040 devfs_dn_free(dnp); /* account for '.' */
1050 dnp->dn_linklist = NULL;
1052 if(dnp->dn_linklist == dirent_p) {
1053 dnp->dn_linklist = dirent_p->de_nextlink;
1056 devfs_dn_free(dnp);
1090 * can handle if there is no dnp
1099 devnode_t * dnp = dirent_p->de_dnp;
1101 if(dnp) {
1102 if(dnp->dn_type == DEV_DIR)
1104 while(dnp->dn_typeinfo.Dir.dirlist)
1106 dev_free_hier(dnp->dn_typeinfo.Dir.dirlist);
1107 dev_free_name(dnp->dn_typeinfo.Dir.dirlist);
1120 * If an error is returned, then the dnp may have been freed (we
1125 devfs_dntovn(devnode_t * dnp, struct vnode **vn_pp, __unused struct proc * p)
1141 if (dnp->dn_lflags & DN_DELETE) {
1145 devfs_ref_node(dnp);
1149 vn_p = dnp->dn_vn;
1162 if (dnp->dn_lflags & DN_DELETE) {
1195 if (dnp->dn_lflags & DN_CREATE) {
1196 dnp->dn_lflags |= DN_CREATEWAIT;
1197 msleep(&dnp->dn_lflags, &devfs_mutex, PRIBIO, 0 , 0);
1201 dnp->dn_lflags |= DN_CREATE;
1203 switch (dnp->dn_type) {
1208 if (dnp->dn_typeinfo.Dir.parent == dnp) {
1215 vtype = (dnp->dn_type == DEV_BDEV) ? VBLK : VCHR;
1223 vfsp.vnfs_mp = dnp->dn_dvm->mount;
1227 vfsp.vnfs_fsnode = dnp;
1229 vfsp.vnfs_vops = *(dnp->dn_ops);
1237 if (dnp->dn_clone != NULL) {
1238 int n_major = major(dnp->dn_typeinfo.dev);
1240 n_minor = (*dnp->dn_clone)(dnp->dn_typeinfo.dev, DEVFS_CLONE_ALLOC);
1248 vfsp.vnfs_rdev = dnp->dn_typeinfo.dev;
1273 if ((dnp->dn_clone != NULL) && (dnp->dn_vn != NULLVP) )
1284 devfs_ref_node(dnp);
1290 if (dnp->dn_clone == NULL) {
1291 dnp->dn_vn = vn_p;
1303 (void)(*dnp->dn_clone)(dnp->dn_typeinfo.dev, DEVFS_CLONE_FREE);
1306 dnp->dn_lflags &= ~DN_CREATE;
1307 if (dnp->dn_lflags & DN_CREATEWAIT) {
1308 dnp->dn_lflags &= ~DN_CREATEWAIT;
1309 wakeup(&dnp->dn_lflags);
1318 devfs_rele_node(dnp);
1328 devfs_ref_node(devnode_t *dnp)
1330 dnp->dn_refcount++;
1338 devfs_rele_node(devnode_t *dnp)
1340 dnp->dn_refcount--;
1341 if (dnp->dn_refcount < 0) {
1343 } else if ((dnp->dn_refcount == 0) && (dnp->dn_lflags & DN_DELETE)) {
1344 devnode_free(dnp);
1359 devnode_t * dnp;
1362 if ((error = dev_add_node(type, typeinfo, proto, &dnp,
1369 if ((error = dev_add_name(name ,parent ,NULL, dnp, nm_pp)) != 0)
1371 devfs_dn_free(dnp); /* 1->0 for dir, 0->(-1) for other */
1393 devfs_record_event(devfs_event_log_t delp, devnode_t *dnp, uint32_t events)
1400 if (dnp->dn_vn != NULLVP && vnode_ismonitored(dnp->dn_vn)) {
1402 dvep->dve_vp = dnp->dn_vn;
1403 dvep->dve_vid = vnode_vid(dnp->dn_vn);
1528 devnode_t * dnp;
1594 if (dev_finddir(path, NULL, DEVFS_CREATE, &dnp, &event_log) == 0) {
1596 if (dev_add_entry(name, dnp, type, &typeinfo, NULL, NULL, &new_dev) == 0) {
1604 devfs_propogate(dnp->dn_typeinfo.Dir.myname, new_dev, &event_log);