Lines Matching refs:de
189 struct devfs_dirent *de; in devfs_find() local
191 TAILQ_FOREACH(de, &dd->de_dlist, de_list) { in devfs_find()
192 if (namelen != de->de_dirent->d_namlen) in devfs_find()
194 if (type != 0 && type != de->de_dirent->d_type) in devfs_find()
202 if (de->de_dirent->d_type == DT_CHR && in devfs_find()
203 (de->de_cdp->cdp_flags & CDP_ACTIVE) == 0) in devfs_find()
206 if (bcmp(name, de->de_dirent->d_name, namelen) != 0) in devfs_find()
210 KASSERT(de == NULL || (de->de_flags & DE_DOOMED) == 0, in devfs_find()
212 return (de); in devfs_find()
219 struct devfs_dirent *de; in devfs_newdirent() local
223 i = sizeof(*de) + GENERIC_DIRSIZ(&d); in devfs_newdirent()
224 de = malloc(i, M_DEVFS3, M_WAITOK | M_ZERO); in devfs_newdirent()
225 de->de_dirent = (struct dirent *)(de + 1); in devfs_newdirent()
226 de->de_dirent->d_namlen = namelen; in devfs_newdirent()
227 de->de_dirent->d_reclen = GENERIC_DIRSIZ(&d); in devfs_newdirent()
228 bcopy(name, de->de_dirent->d_name, namelen); in devfs_newdirent()
229 dirent_terminate(de->de_dirent); in devfs_newdirent()
230 vfs_timestamp(&de->de_ctime); in devfs_newdirent()
231 de->de_mtime = de->de_atime = de->de_ctime; in devfs_newdirent()
232 de->de_links = 1; in devfs_newdirent()
233 de->de_holdcnt = 1; in devfs_newdirent()
235 mac_devfs_init(de); in devfs_newdirent()
237 return (de); in devfs_newdirent()
241 devfs_parent_dirent(struct devfs_dirent *de) in devfs_parent_dirent() argument
244 if (de->de_dirent->d_type != DT_DIR) in devfs_parent_dirent()
245 return (de->de_dir); in devfs_parent_dirent()
247 if (de->de_flags & (DE_DOT | DE_DOTDOT)) in devfs_parent_dirent()
250 de = TAILQ_FIRST(&de->de_dlist); /* "." */ in devfs_parent_dirent()
251 if (de == NULL) in devfs_parent_dirent()
253 de = TAILQ_NEXT(de, de_list); /* ".." */ in devfs_parent_dirent()
254 if (de == NULL) in devfs_parent_dirent()
257 return (de->de_dir); in devfs_parent_dirent()
265 struct devfs_dirent *de; in devfs_vmkdir() local
285 de = devfs_newdirent(".", 1); in devfs_vmkdir()
286 de->de_dirent->d_type = DT_DIR; in devfs_vmkdir()
287 de->de_flags |= DE_DOT; in devfs_vmkdir()
288 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list); in devfs_vmkdir()
289 de->de_dir = dd; in devfs_vmkdir()
292 de = devfs_newdirent("..", 2); in devfs_vmkdir()
293 de->de_dirent->d_type = DT_DIR; in devfs_vmkdir()
294 de->de_flags |= DE_DOTDOT; in devfs_vmkdir()
295 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list); in devfs_vmkdir()
297 de->de_dir = dd; in devfs_vmkdir()
299 de->de_dir = dotdot; in devfs_vmkdir()
313 devfs_dirent_free(struct devfs_dirent *de) in devfs_dirent_free() argument
317 vp = de->de_vnode; in devfs_dirent_free()
319 if (vp != NULL && vp->v_data == de) in devfs_dirent_free()
322 free(de, M_DEVFS3); in devfs_dirent_free()
330 devfs_rmdir_empty(struct devfs_mount *dm, struct devfs_dirent *de) in devfs_rmdir_empty() argument
337 KASSERT(de->de_dirent->d_type == DT_DIR, in devfs_rmdir_empty()
340 if ((de->de_flags & DE_DOOMED) != 0 || de == dm->dm_rootdir) in devfs_rmdir_empty()
343 de_dot = TAILQ_FIRST(&de->de_dlist); in devfs_rmdir_empty()
351 dd = devfs_parent_dirent(de); in devfs_rmdir_empty()
353 TAILQ_REMOVE(&de->de_dlist, de_dot, de_list); in devfs_rmdir_empty()
354 TAILQ_REMOVE(&de->de_dlist, de_dotdot, de_list); in devfs_rmdir_empty()
355 TAILQ_REMOVE(&dd->de_dlist, de, de_list); in devfs_rmdir_empty()
357 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_rmdir_empty()
365 de = dd; in devfs_rmdir_empty()
374 devfs_delete(struct devfs_mount *dm, struct devfs_dirent *de, int flags) in devfs_delete() argument
379 KASSERT((de->de_flags & DE_DOOMED) == 0, in devfs_delete()
381 de->de_flags |= DE_DOOMED; in devfs_delete()
384 dd = devfs_parent_dirent(de); in devfs_delete()
387 if (de->de_flags & DE_USER) { in devfs_delete()
395 vp = de->de_vnode; in devfs_delete()
412 if (de->de_symlink) { in devfs_delete()
413 free(de->de_symlink, M_DEVFS); in devfs_delete()
414 de->de_symlink = NULL; in devfs_delete()
417 mac_devfs_destroy(de); in devfs_delete()
419 if (de->de_inode > DEVFS_ROOTINO) { in devfs_delete()
420 devfs_free_cdp_inode(de->de_inode); in devfs_delete()
421 de->de_inode = 0; in devfs_delete()
423 if (DEVFS_DE_DROP(de)) in devfs_delete()
424 devfs_dirent_free(de); in devfs_delete()
443 struct devfs_dirent *de; in devfs_purge() local
454 de = TAILQ_LAST(&dd->de_dlist, devfs_dlist_head); in devfs_purge()
455 if (de == NULL) in devfs_purge()
457 TAILQ_REMOVE(&dd->de_dlist, de, de_list); in devfs_purge()
458 if (de->de_flags & DE_USER) in devfs_purge()
460 if (de->de_flags & (DE_DOT | DE_DOTDOT)) in devfs_purge()
461 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_purge()
462 else if (de->de_dirent->d_type == DT_DIR) in devfs_purge()
463 devfs_purge(dm, de); in devfs_purge()
465 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_purge()
513 struct devfs_dirent *de; in devfs_populate_loop() local
532 de = cdp->cdp_dirents[dm->dm_idx]; in devfs_populate_loop()
534 KASSERT(cdp == de->de_cdp, in devfs_populate_loop()
536 cdp->cdp_c.si_name, cdp, de->de_cdp)); in devfs_populate_loop()
537 KASSERT(de->de_dir != NULL, ("Null de->de_dir")); in devfs_populate_loop()
540 TAILQ_REMOVE(&de->de_dir->de_dlist, de, de_list); in devfs_populate_loop()
541 de->de_cdp = NULL; in devfs_populate_loop()
542 de->de_inode = 0; in devfs_populate_loop()
543 devfs_delete(dm, de, 0); in devfs_populate_loop()
569 de = cdp->cdp_dirents[dm->dm_idx]; in devfs_populate_loop()
570 KASSERT(cdp == de->de_cdp, ("inconsistent cdp")); in devfs_populate_loop()
588 de = devfs_find(dd, s, q - s, 0); in devfs_populate_loop()
589 if (de == NULL) in devfs_populate_loop()
590 de = devfs_vmkdir(dm, s, q - s, dd, 0); in devfs_populate_loop()
591 else if (de->de_dirent->d_type == DT_LNK) { in devfs_populate_loop()
592 de = devfs_find(dd, s, q - s, DT_DIR); in devfs_populate_loop()
593 if (de == NULL) in devfs_populate_loop()
594 de = devfs_vmkdir(dm, s, q - s, dd, 0); in devfs_populate_loop()
595 de->de_flags |= DE_COVERED; in devfs_populate_loop()
598 dd = de; in devfs_populate_loop()
606 de = devfs_find(dd, s, q - s, DT_LNK); in devfs_populate_loop()
607 if (de != NULL) in devfs_populate_loop()
610 de = devfs_newdirent(s, q - s); in devfs_populate_loop()
612 de->de_uid = 0; in devfs_populate_loop()
613 de->de_gid = 0; in devfs_populate_loop()
614 de->de_mode = 0755; in devfs_populate_loop()
615 de->de_dirent->d_type = DT_LNK; in devfs_populate_loop()
623 de->de_symlink = malloc(j, M_DEVFS, M_WAITOK); in devfs_populate_loop()
624 de->de_symlink[0] = 0; in devfs_populate_loop()
626 strcat(de->de_symlink, "../"); in devfs_populate_loop()
627 strcat(de->de_symlink, pdev->si_name); in devfs_populate_loop()
629 de->de_uid = cdp->cdp_c.si_uid; in devfs_populate_loop()
630 de->de_gid = cdp->cdp_c.si_gid; in devfs_populate_loop()
631 de->de_mode = cdp->cdp_c.si_mode; in devfs_populate_loop()
632 de->de_dirent->d_type = DT_CHR; in devfs_populate_loop()
634 de->de_flags |= de_flags; in devfs_populate_loop()
635 de->de_inode = cdp->cdp_inode; in devfs_populate_loop()
636 de->de_cdp = cdp; in devfs_populate_loop()
639 &cdp->cdp_c, de); in devfs_populate_loop()
641 de->de_dir = dd; in devfs_populate_loop()
642 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list); in devfs_populate_loop()
643 devfs_rules_apply(dm, de); in devfs_populate_loop()
648 cdp->cdp_dirents[dm->dm_idx] = de; in devfs_populate_loop()
649 KASSERT(de->de_cdp != (void *)0xdeadc0de, in devfs_populate_loop()