Lines Matching full:dm
337 devfs_rmdir_empty(struct devfs_mount *dm, struct devfs_dirent *de) in devfs_rmdir_empty() argument
341 sx_assert(&dm->dm_lock, SX_XLOCKED); in devfs_rmdir_empty()
347 if ((de->de_flags & DE_DOOMED) != 0 || de == dm->dm_rootdir) in devfs_rmdir_empty()
364 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_rmdir_empty()
365 devfs_delete(dm, de_dot, DEVFS_DEL_NORECURSE); in devfs_rmdir_empty()
366 devfs_delete(dm, de_dotdot, DEVFS_DEL_NORECURSE); in devfs_rmdir_empty()
377 * The caller needs to hold the dm for the duration of the call since
378 * dm->dm_lock may be temporary dropped.
381 devfs_delete(struct devfs_mount *dm, struct devfs_dirent *de, int flags) in devfs_delete() argument
396 devfs_dir_unref_de(dm, dd); in devfs_delete()
406 sx_unlock(&dm->dm_lock); in devfs_delete()
411 sx_xlock(&dm->dm_lock); in devfs_delete()
432 devfs_rmdir_empty(dm, dd); in devfs_delete()
439 * The caller needs to hold the dm for the duration of the call.
443 devfs_purge(struct devfs_mount *dm, struct devfs_dirent *dd) in devfs_purge() argument
447 sx_assert(&dm->dm_lock, SX_XLOCKED); in devfs_purge()
461 devfs_dir_unref_de(dm, dd); in devfs_purge()
463 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_purge()
465 devfs_purge(dm, de); in devfs_purge()
467 devfs_delete(dm, de, DEVFS_DEL_NORECURSE); in devfs_purge()
472 devfs_delete(dm, dd, DEVFS_DEL_NORECURSE); in devfs_purge()
482 devfs_metoo(struct cdev_priv *cdp, struct devfs_mount *dm) in devfs_metoo() argument
487 siz = (dm->dm_idx + 1) * sizeof *dep; in devfs_metoo()
490 if (dm->dm_idx <= cdp->cdp_maxdirent) { in devfs_metoo()
503 cdp->cdp_maxdirent = dm->dm_idx; in devfs_metoo()
509 * The caller needs to hold the dm for the duration of the call.
512 devfs_populate_loop(struct devfs_mount *dm, int cleanup) in devfs_populate_loop() argument
521 sx_assert(&dm->dm_lock, SX_XLOCKED); in devfs_populate_loop()
534 dm->dm_idx <= cdp->cdp_maxdirent && in devfs_populate_loop()
535 cdp->cdp_dirents[dm->dm_idx] != NULL) { in devfs_populate_loop()
536 de = cdp->cdp_dirents[dm->dm_idx]; in devfs_populate_loop()
537 cdp->cdp_dirents[dm->dm_idx] = NULL; in devfs_populate_loop()
547 devfs_delete(dm, de, 0); in devfs_populate_loop()
572 if (dm->dm_idx <= cdp->cdp_maxdirent && in devfs_populate_loop()
573 cdp->cdp_dirents[dm->dm_idx] != NULL) { in devfs_populate_loop()
574 de = cdp->cdp_dirents[dm->dm_idx]; in devfs_populate_loop()
582 if (dm->dm_idx > cdp->cdp_maxdirent) in devfs_populate_loop()
583 devfs_metoo(cdp, dm); in devfs_populate_loop()
585 dd = dm->dm_rootdir; in devfs_populate_loop()
594 de = devfs_vmkdir(dm, s, q - s, dd, 0); in devfs_populate_loop()
598 de = devfs_vmkdir(dm, s, q - s, dd, 0); in devfs_populate_loop()
622 while (dt != dm->dm_rootdir && in devfs_populate_loop()
641 mac_devfs_create_device(cdp->cdp_c.si_cred, dm->dm_mount, in devfs_populate_loop()
646 devfs_rules_apply(dm, de); in devfs_populate_loop()
649 KASSERT(cdp->cdp_dirents[dm->dm_idx] == NULL, in devfs_populate_loop()
651 cdp->cdp_dirents[dm->dm_idx] = de; in devfs_populate_loop()
662 devfs_populate_needed(struct devfs_mount *dm) in devfs_populate_needed() argument
665 return (dm->dm_generation != devfs_generation); in devfs_populate_needed()
669 * The caller needs to hold the dm for the duration of the call.
672 devfs_populate(struct devfs_mount *dm) in devfs_populate() argument
676 sx_assert(&dm->dm_lock, SX_XLOCKED); in devfs_populate()
677 if (!devfs_populate_needed(dm)) in devfs_populate()
680 while (devfs_populate_loop(dm, 0)) in devfs_populate()
682 dm->dm_generation = gen; in devfs_populate()
686 * The caller needs to hold the dm for the duration of the call.
689 devfs_cleanup(struct devfs_mount *dm) in devfs_cleanup() argument
692 sx_assert(&dm->dm_lock, SX_XLOCKED); in devfs_cleanup()
693 while (devfs_populate_loop(dm, 1)) in devfs_cleanup()
695 devfs_purge(dm, dm->dm_rootdir); in devfs_cleanup()