Lines Matching refs:de
192 struct devfs_dirent *de; in devfs_find() local
194 TAILQ_FOREACH(de, &dd->de_dlist, de_list) { in devfs_find()
195 if (namelen != de->de_dirent->d_namlen) in devfs_find()
197 if (type != 0 && type != de->de_dirent->d_type) in devfs_find()
205 if (de->de_dirent->d_type == DT_CHR && in devfs_find()
206 (de->de_cdp->cdp_flags & CDP_ACTIVE) == 0) in devfs_find()
209 if (bcmp(name, de->de_dirent->d_name, namelen) != 0) in devfs_find()
213 KASSERT(de == NULL || (de->de_flags & DE_DOOMED) == 0, in devfs_find()
215 return (de); in devfs_find()
222 struct devfs_dirent *de; in devfs_newdirent() local
226 i = sizeof(*de) + GENERIC_DIRSIZ(&d); in devfs_newdirent()
227 de = malloc(i, M_DEVFS3, M_WAITOK | M_ZERO); in devfs_newdirent()
228 de->de_dirent = (struct dirent *)(de + 1); in devfs_newdirent()
229 de->de_dirent->d_namlen = namelen; in devfs_newdirent()
230 de->de_dirent->d_reclen = GENERIC_DIRSIZ(&d); in devfs_newdirent()
231 bcopy(name, de->de_dirent->d_name, namelen); in devfs_newdirent()
232 dirent_terminate(de->de_dirent); in devfs_newdirent()
233 vfs_timestamp(&de->de_ctime); in devfs_newdirent()
234 de->de_mtime = de->de_atime = de->de_ctime; in devfs_newdirent()
235 de->de_links = 1; in devfs_newdirent()
236 de->de_holdcnt = 1; in devfs_newdirent()
238 mac_devfs_init(de); in devfs_newdirent()
240 return (de); in devfs_newdirent()
244 devfs_parent_dirent(struct devfs_dirent *de) in devfs_parent_dirent() argument
247 if (de->de_dirent->d_type != DT_DIR) in devfs_parent_dirent()
248 return (de->de_dir); in devfs_parent_dirent()
250 if (de->de_flags & (DE_DOT | DE_DOTDOT)) in devfs_parent_dirent()
253 de = TAILQ_FIRST(&de->de_dlist); /* "." */ in devfs_parent_dirent()
254 if (de == NULL) in devfs_parent_dirent()
256 de = TAILQ_NEXT(de, de_list); /* ".." */ in devfs_parent_dirent()
257 if (de == NULL) in devfs_parent_dirent()
260 return (de->de_dir); in devfs_parent_dirent()
268 struct devfs_dirent *de; in devfs_vmkdir() local
288 de = devfs_newdirent(".", 1); in devfs_vmkdir()
289 de->de_dirent->d_type = DT_DIR; in devfs_vmkdir()
290 de->de_flags |= DE_DOT; in devfs_vmkdir()
291 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list); in devfs_vmkdir()
292 de->de_dir = dd; in devfs_vmkdir()
295 de = devfs_newdirent("..", 2); in devfs_vmkdir()
296 de->de_dirent->d_type = DT_DIR; in devfs_vmkdir()
297 de->de_flags |= DE_DOTDOT; in devfs_vmkdir()
298 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list); in devfs_vmkdir()
300 de->de_dir = dd; in devfs_vmkdir()
302 de->de_dir = dotdot; in devfs_vmkdir()
316 devfs_dirent_free(struct devfs_dirent *de) in devfs_dirent_free() argument
320 vp = de->de_vnode; in devfs_dirent_free()
322 if (vp != NULL && vp->v_data == de) in devfs_dirent_free()
325 free(de, M_DEVFS3); in devfs_dirent_free()
333 devfs_rmdir_empty(struct devfs_mount *dm, struct devfs_dirent *de) in devfs_rmdir_empty() argument
340 KASSERT(de->de_dirent->d_type == DT_DIR, in devfs_rmdir_empty()
343 if ((de->de_flags & DE_DOOMED) != 0 || de == dm->dm_rootdir) in devfs_rmdir_empty()
346 de_dot = TAILQ_FIRST(&de->de_dlist); in devfs_rmdir_empty()
354 dd = devfs_parent_dirent(de); in devfs_rmdir_empty()
356 TAILQ_REMOVE(&de->de_dlist, de_dot, de_list); in devfs_rmdir_empty()
357 TAILQ_REMOVE(&de->de_dlist, de_dotdot, de_list); in devfs_rmdir_empty()
358 TAILQ_REMOVE(&dd->de_dlist, de, de_list); in devfs_rmdir_empty()
360 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_rmdir_empty()
368 de = dd; in devfs_rmdir_empty()
377 devfs_delete(struct devfs_mount *dm, struct devfs_dirent *de, int flags) in devfs_delete() argument
382 KASSERT((de->de_flags & DE_DOOMED) == 0, in devfs_delete()
384 de->de_flags |= DE_DOOMED; in devfs_delete()
387 dd = devfs_parent_dirent(de); in devfs_delete()
390 if (de->de_flags & DE_USER) { in devfs_delete()
398 vp = de->de_vnode; in devfs_delete()
415 if (de->de_symlink) { in devfs_delete()
416 free(de->de_symlink, M_DEVFS); in devfs_delete()
417 de->de_symlink = NULL; in devfs_delete()
420 mac_devfs_destroy(de); in devfs_delete()
422 if (de->de_inode > DEVFS_ROOTINO) { in devfs_delete()
423 devfs_free_cdp_inode(de->de_inode); in devfs_delete()
424 de->de_inode = 0; in devfs_delete()
426 if (DEVFS_DE_DROP(de)) in devfs_delete()
427 devfs_dirent_free(de); in devfs_delete()
446 struct devfs_dirent *de; in devfs_purge() local
457 de = TAILQ_LAST(&dd->de_dlist, devfs_dlist_head); in devfs_purge()
458 if (de == NULL) in devfs_purge()
460 TAILQ_REMOVE(&dd->de_dlist, de, de_list); in devfs_purge()
461 if (de->de_flags & DE_USER) in devfs_purge()
463 if (de->de_flags & (DE_DOT | DE_DOTDOT)) in devfs_purge()
464 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_purge()
465 else if (de->de_dirent->d_type == DT_DIR) in devfs_purge()
466 devfs_purge(dm, de); in devfs_purge()
468 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_purge()
516 struct devfs_dirent *de; in devfs_populate_loop() local
534 de = cdp->cdp_dirents[dm->dm_idx]; in devfs_populate_loop()
536 KASSERT(cdp == de->de_cdp, in devfs_populate_loop()
538 cdp->cdp_c.si_name, cdp, de->de_cdp)); in devfs_populate_loop()
539 KASSERT(de->de_dir != NULL, ("Null de->de_dir")); in devfs_populate_loop()
542 TAILQ_REMOVE(&de->de_dir->de_dlist, de, de_list); in devfs_populate_loop()
543 de->de_cdp = NULL; in devfs_populate_loop()
544 de->de_inode = 0; in devfs_populate_loop()
545 devfs_delete(dm, de, 0); in devfs_populate_loop()
571 de = cdp->cdp_dirents[dm->dm_idx]; in devfs_populate_loop()
572 KASSERT(cdp == de->de_cdp, ("inconsistent cdp")); in devfs_populate_loop()
589 de = devfs_find(dd, s, q - s, 0); in devfs_populate_loop()
590 if (de == NULL) in devfs_populate_loop()
591 de = devfs_vmkdir(dm, s, q - s, dd, 0); in devfs_populate_loop()
592 else if (de->de_dirent->d_type == DT_LNK) { in devfs_populate_loop()
593 de = devfs_find(dd, s, q - s, DT_DIR); in devfs_populate_loop()
594 if (de == NULL) in devfs_populate_loop()
595 de = devfs_vmkdir(dm, s, q - s, dd, 0); in devfs_populate_loop()
596 de->de_flags |= DE_COVERED; in devfs_populate_loop()
599 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()