Lines Matching refs:de
196 struct devfs_dirent *de; in devfs_find() local
198 TAILQ_FOREACH(de, &dd->de_dlist, de_list) { in devfs_find()
199 if (namelen != de->de_dirent->d_namlen) in devfs_find()
201 if (type != 0 && type != de->de_dirent->d_type) in devfs_find()
209 if (de->de_dirent->d_type == DT_CHR && in devfs_find()
210 (de->de_cdp->cdp_flags & CDP_ACTIVE) == 0) in devfs_find()
213 if (bcmp(name, de->de_dirent->d_name, namelen) != 0) in devfs_find()
217 KASSERT(de == NULL || (de->de_flags & DE_DOOMED) == 0, in devfs_find()
219 return (de); in devfs_find()
226 struct devfs_dirent *de; in devfs_newdirent() local
230 i = sizeof(*de) + GENERIC_DIRSIZ(&d); in devfs_newdirent()
231 de = malloc(i, M_DEVFS3, M_WAITOK | M_ZERO); in devfs_newdirent()
232 de->de_dirent = (struct dirent *)(de + 1); in devfs_newdirent()
233 de->de_dirent->d_namlen = namelen; in devfs_newdirent()
234 de->de_dirent->d_reclen = GENERIC_DIRSIZ(&d); in devfs_newdirent()
235 bcopy(name, de->de_dirent->d_name, namelen); in devfs_newdirent()
236 dirent_terminate(de->de_dirent); in devfs_newdirent()
237 vfs_timestamp(&de->de_ctime); in devfs_newdirent()
238 de->de_mtime = de->de_atime = de->de_ctime; in devfs_newdirent()
239 de->de_links = 1; in devfs_newdirent()
240 de->de_holdcnt = 1; in devfs_newdirent()
242 mac_devfs_init(de); in devfs_newdirent()
244 return (de); in devfs_newdirent()
248 devfs_parent_dirent(struct devfs_dirent *de) in devfs_parent_dirent() argument
251 if (de->de_dirent->d_type != DT_DIR) in devfs_parent_dirent()
252 return (de->de_dir); in devfs_parent_dirent()
254 if (de->de_flags & (DE_DOT | DE_DOTDOT)) in devfs_parent_dirent()
257 de = TAILQ_FIRST(&de->de_dlist); /* "." */ in devfs_parent_dirent()
258 if (de == NULL) in devfs_parent_dirent()
260 de = TAILQ_NEXT(de, de_list); /* ".." */ in devfs_parent_dirent()
261 if (de == NULL) in devfs_parent_dirent()
264 return (de->de_dir); in devfs_parent_dirent()
272 struct devfs_dirent *de; in devfs_vmkdir() local
292 de = devfs_newdirent(".", 1); in devfs_vmkdir()
293 de->de_dirent->d_type = DT_DIR; in devfs_vmkdir()
294 de->de_flags |= DE_DOT; in devfs_vmkdir()
295 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list); in devfs_vmkdir()
296 de->de_dir = dd; in devfs_vmkdir()
299 de = devfs_newdirent("..", 2); in devfs_vmkdir()
300 de->de_dirent->d_type = DT_DIR; in devfs_vmkdir()
301 de->de_flags |= DE_DOTDOT; in devfs_vmkdir()
302 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list); in devfs_vmkdir()
304 de->de_dir = dd; in devfs_vmkdir()
306 de->de_dir = dotdot; in devfs_vmkdir()
320 devfs_dirent_free(struct devfs_dirent *de) in devfs_dirent_free() argument
324 vp = de->de_vnode; in devfs_dirent_free()
326 if (vp != NULL && vp->v_data == de) in devfs_dirent_free()
329 free(de, M_DEVFS3); in devfs_dirent_free()
337 devfs_rmdir_empty(struct devfs_mount *dm, struct devfs_dirent *de) in devfs_rmdir_empty() argument
344 KASSERT(de->de_dirent->d_type == DT_DIR, in devfs_rmdir_empty()
347 if ((de->de_flags & DE_DOOMED) != 0 || de == dm->dm_rootdir) in devfs_rmdir_empty()
350 de_dot = TAILQ_FIRST(&de->de_dlist); in devfs_rmdir_empty()
358 dd = devfs_parent_dirent(de); in devfs_rmdir_empty()
360 TAILQ_REMOVE(&de->de_dlist, de_dot, de_list); in devfs_rmdir_empty()
361 TAILQ_REMOVE(&de->de_dlist, de_dotdot, de_list); in devfs_rmdir_empty()
362 TAILQ_REMOVE(&dd->de_dlist, de, de_list); in devfs_rmdir_empty()
364 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_rmdir_empty()
372 de = dd; in devfs_rmdir_empty()
381 devfs_delete(struct devfs_mount *dm, struct devfs_dirent *de, int flags) in devfs_delete() argument
386 KASSERT((de->de_flags & DE_DOOMED) == 0, in devfs_delete()
388 de->de_flags |= DE_DOOMED; in devfs_delete()
391 dd = devfs_parent_dirent(de); in devfs_delete()
394 if (de->de_flags & DE_USER) { in devfs_delete()
402 vp = de->de_vnode; in devfs_delete()
414 if (de->de_symlink) { in devfs_delete()
415 free(de->de_symlink, M_DEVFS); in devfs_delete()
416 de->de_symlink = NULL; in devfs_delete()
419 mac_devfs_destroy(de); in devfs_delete()
421 if (de->de_inode > DEVFS_ROOTINO) { in devfs_delete()
422 devfs_free_cdp_inode(de->de_inode); in devfs_delete()
423 de->de_inode = 0; in devfs_delete()
425 if (DEVFS_DE_DROP(de)) in devfs_delete()
426 devfs_dirent_free(de); in devfs_delete()
445 struct devfs_dirent *de; in devfs_purge() local
456 de = TAILQ_LAST(&dd->de_dlist, devfs_dlist_head); in devfs_purge()
457 if (de == NULL) in devfs_purge()
459 TAILQ_REMOVE(&dd->de_dlist, de, de_list); in devfs_purge()
460 if (de->de_flags & DE_USER) in devfs_purge()
462 if (de->de_flags & (DE_DOT | DE_DOTDOT)) in devfs_purge()
463 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_purge()
464 else if (de->de_dirent->d_type == DT_DIR) in devfs_purge()
465 devfs_purge(dm, de); in devfs_purge()
467 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_purge()
515 struct devfs_dirent *de; in devfs_populate_loop() local
536 de = cdp->cdp_dirents[dm->dm_idx]; in devfs_populate_loop()
538 KASSERT(cdp == de->de_cdp, in devfs_populate_loop()
540 cdp->cdp_c.si_name, cdp, de->de_cdp)); in devfs_populate_loop()
541 KASSERT(de->de_dir != NULL, ("Null de->de_dir")); in devfs_populate_loop()
544 TAILQ_REMOVE(&de->de_dir->de_dlist, de, de_list); in devfs_populate_loop()
545 de->de_cdp = NULL; in devfs_populate_loop()
546 de->de_inode = 0; in devfs_populate_loop()
547 devfs_delete(dm, de, 0); in devfs_populate_loop()
574 de = cdp->cdp_dirents[dm->dm_idx]; in devfs_populate_loop()
575 KASSERT(cdp == de->de_cdp, ("inconsistent cdp")); in devfs_populate_loop()
592 de = devfs_find(dd, s, q - s, 0); 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 else if (de->de_dirent->d_type == DT_LNK) { in devfs_populate_loop()
596 de = devfs_find(dd, s, q - s, DT_DIR); in devfs_populate_loop()
597 if (de == NULL) in devfs_populate_loop()
598 de = devfs_vmkdir(dm, s, q - s, dd, 0); in devfs_populate_loop()
599 de->de_flags |= DE_COVERED; in devfs_populate_loop()
602 dd = de; in devfs_populate_loop()
609 de = devfs_find(dd, s, q - s, DT_LNK); in devfs_populate_loop()
610 if (de != NULL) in devfs_populate_loop()
613 de = devfs_newdirent(s, q - s); in devfs_populate_loop()
615 de->de_uid = 0; in devfs_populate_loop()
616 de->de_gid = 0; in devfs_populate_loop()
617 de->de_mode = 0755; in devfs_populate_loop()
618 de->de_dirent->d_type = DT_LNK; in devfs_populate_loop()
626 de->de_symlink = malloc(j, M_DEVFS, M_WAITOK); in devfs_populate_loop()
627 de->de_symlink[0] = 0; in devfs_populate_loop()
629 strcat(de->de_symlink, "../"); in devfs_populate_loop()
630 strcat(de->de_symlink, pdev->si_name); in devfs_populate_loop()
632 de->de_uid = cdp->cdp_c.si_uid; in devfs_populate_loop()
633 de->de_gid = cdp->cdp_c.si_gid; in devfs_populate_loop()
634 de->de_mode = cdp->cdp_c.si_mode; in devfs_populate_loop()
635 de->de_dirent->d_type = DT_CHR; in devfs_populate_loop()
637 de->de_flags |= de_flags; in devfs_populate_loop()
638 de->de_inode = cdp->cdp_inode; in devfs_populate_loop()
639 de->de_cdp = cdp; in devfs_populate_loop()
642 &cdp->cdp_c, de); in devfs_populate_loop()
644 de->de_dir = dd; in devfs_populate_loop()
645 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list); in devfs_populate_loop()
646 devfs_rules_apply(dm, de); in devfs_populate_loop()
651 cdp->cdp_dirents[dm->dm_idx] = de; in devfs_populate_loop()
652 KASSERT(de->de_cdp != (void *)0xdeadc0de, in devfs_populate_loop()