Lines Matching refs:ddv
335 dv_mkdir(struct dv_node *ddv, dev_info_t *devi, char *nm) in dv_mkdir() argument
353 vp->v_vfsp = DVTOV(ddv)->v_vfsp; in dv_mkdir()
355 vp->v_rdev = DVTOV(ddv)->v_rdev; in dv_mkdir()
356 vn_setops(vp, vn_getops(DVTOV(ddv))); in dv_mkdir()
364 dv->dv_dotdot = ddv; in dv_mkdir()
386 dv_mknod(struct dv_node *ddv, dev_info_t *devi, char *nm, in dv_mknod() argument
404 vp->v_vfsp = DVTOV(ddv)->v_vfsp; in dv_mknod()
407 vn_setops(vp, vn_getops(DVTOV(ddv))); in dv_mknod()
419 dv->dv_dotdot = ddv; in dv_mknod()
499 dv_findbyname(struct dv_node *ddv, char *nm) in dv_findbyname() argument
505 ASSERT(RW_LOCK_HELD(&ddv->dv_contents)); in dv_findbyname()
509 dv = avl_find(&ddv->dv_entries, &dvtmp, &where); in dv_findbyname()
511 ASSERT(dv->dv_dotdot == ddv); in dv_findbyname()
523 dv_insert(struct dv_node *ddv, struct dv_node *dv) in dv_insert() argument
527 ASSERT(RW_WRITE_HELD(&ddv->dv_contents)); in dv_insert()
528 ASSERT(DVTOV(ddv)->v_type == VDIR); in dv_insert()
529 ASSERT(ddv->dv_nlink >= 2); in dv_insert()
534 dv->dv_dotdot = ddv; in dv_insert()
536 ddv->dv_nlink++; /* .. to containing directory */ in dv_insert()
543 VERIFY(avl_find(&ddv->dv_entries, dv, &where) == NULL); in dv_insert()
544 avl_insert(&ddv->dv_entries, dv, where); in dv_insert()
551 dv_unlink(struct dv_node *ddv, struct dv_node *dv) in dv_unlink() argument
554 ASSERT(ddv && dv); in dv_unlink()
555 ASSERT(dv->dv_dotdot == ddv); in dv_unlink()
556 ASSERT(RW_WRITE_HELD(&ddv->dv_contents)); in dv_unlink()
557 ASSERT(DVTOV(ddv)->v_type == VDIR); in dv_unlink()
562 ddv->dv_nlink--; /* .. to containing directory */ in dv_unlink()
567 ASSERT(ddv->dv_nlink >= 2); in dv_unlink()
573 avl_remove(&ddv->dv_entries, dv); in dv_unlink()
885 dv_clone_mknod(struct dv_node *ddv, char *drvname) in dv_clone_mknod() argument
915 dvp = dv_mknod(ddv, clone_dip, devnm, dmd); in dv_clone_mknod()
928 dv_find(struct dv_node *ddv, char *nm, struct vnode **vpp, struct pathname *pnp, in dv_find() argument
942 if (!rw_tryenter(&ddv->dv_contents, RW_READER)) { in dv_find()
945 rw_enter(&ddv->dv_contents, RW_READER); in dv_find()
948 if (DV_STALE(ddv)) { in dv_find()
949 rw_exit(&ddv->dv_contents); in dv_find()
958 *vpp = DVTOV(ddv); in dv_find()
959 rw_exit(&ddv->dv_contents); in dv_find()
968 *vpp = DVTOV(ddv->dv_dotdot); in dv_find()
969 rw_exit(&ddv->dv_contents); in dv_find()
979 rw_exit(&ddv->dv_contents); in dv_find()
988 if ((dv = dv_findbyname(ddv, nm)) != NULL) { in dv_find()
990 ASSERT(RW_LOCK_HELD(&ddv->dv_contents)); in dv_find()
995 rw_exit(&ddv->dv_contents); in dv_find()
1008 rw_exit(&ddv->dv_contents); in dv_find()
1028 rw_exit(&ddv->dv_contents); in dv_find()
1035 dv_shadow_node(DVTOV(ddv), nm, vp, pnp, rdir, cred, in dv_find()
1039 rw_exit(&ddv->dv_contents); in dv_find()
1058 rw_exit(&ddv->dv_contents); in dv_find()
1066 ASSERT(RW_LOCK_HELD(&ddv->dv_contents)); in dv_find()
1067 if (rw_read_locked(&ddv->dv_contents) && in dv_find()
1068 !rw_tryupgrade(&ddv->dv_contents)) { in dv_find()
1069 rw_exit(&ddv->dv_contents); in dv_find()
1070 rw_enter(&ddv->dv_contents, RW_WRITER); in dv_find()
1077 ddv->dv_busy++; /* mark busy before dropping lock */ in dv_find()
1079 rw_exit(&ddv->dv_contents); in dv_find()
1081 pdevi = ddv->dv_devi; in dv_find()
1144 rw_enter(&ddv->dv_contents, RW_WRITER); in dv_find()
1145 ddv->dv_flags |= DV_BUILD; in dv_find()
1146 rw_exit(&ddv->dv_contents); in dv_find()
1153 dv = dv_mkdir(ddv, devi, nm); in dv_find()
1166 dv = dv_clone_mknod(ddv, mnm + 1); in dv_find()
1172 dv = dv_mknod(ddv, devi, nm, dmd); in dv_find()
1194 rw_enter(&ddv->dv_contents, RW_WRITER); in dv_find()
1195 if ((dup = dv_findbyname(ddv, nm)) == NULL) { in dv_find()
1196 dv_insert(ddv, dv); in dv_find()
1257 rw_enter(&ddv->dv_contents, RW_WRITER); in dv_find()
1258 ddv->dv_busy--; in dv_find()
1259 rw_exit(&ddv->dv_contents); in dv_find()
1271 dv_filldir(struct dv_node *ddv) in dv_filldir() argument
1278 ASSERT(DVTOV(ddv)->v_type == VDIR); in dv_filldir()
1279 ASSERT(RW_WRITE_HELD(&ddv->dv_contents)); in dv_filldir()
1280 ASSERT(ddv->dv_flags & DV_BUILD); in dv_filldir()
1282 dcmn_err3(("dv_filldir: %s\n", ddv->dv_name)); in dv_filldir()
1283 if (DV_STALE(ddv)) in dv_filldir()
1285 pdevi = ddv->dv_devi; in dv_filldir()
1288 dcmn_err3(("dv_filldir: config error %s\n", ddv->dv_name)); in dv_filldir()
1334 if ((dv = dv_findbyname(ddv, devnm)) != NULL) { in dv_filldir()
1340 dv = dv_mknod(ddv, devi, devnm, dmd); in dv_filldir()
1341 dv_insert(ddv, dv); in dv_filldir()
1347 if ((dv = dv_findbyname(ddv, devnm + 1)) == NULL) { in dv_filldir()
1349 dv = dv_mkdir(ddv, devi, devnm + 1); in dv_filldir()
1350 dv_insert(ddv, dv); in dv_filldir()
1356 ddv->dv_flags &= ~DV_BUILD; in dv_filldir()
1370 dv_cleandir(struct dv_node *ddv, char *devnm, uint_t flags) in dv_cleandir() argument
1389 dcmn_err3(("dv_cleandir: %s\n", ddv->dv_name)); in dv_cleandir()
1392 !rw_tryenter(&ddv->dv_contents, RW_WRITER)) in dv_cleandir()
1395 for (dv = DV_FIRST_ENTRY(ddv); dv; dv = next) { in dv_cleandir()
1396 next = DV_NEXT_ENTRY(ddv, dv); in dv_cleandir()
1456 dv_unlink(ddv, dv); in dv_cleandir()
1484 ddv->dv_flags |= DV_BUILD; in dv_cleandir()
1487 rw_exit(&ddv->dv_contents); in dv_cleandir()
1498 dv_reset_perm_dir(struct dv_node *ddv, uint_t flags) in dv_reset_perm_dir() argument
1510 rw_enter(&ddv->dv_contents, RW_WRITER); in dv_reset_perm_dir()
1511 for (dv = DV_FIRST_ENTRY(ddv); dv; dv = DV_NEXT_ENTRY(ddv, dv)) { in dv_reset_perm_dir()
1545 dv_shadow_node(DVTOV(ddv), nm, vp, in dv_reset_perm_dir()
1586 ddv->dv_flags |= DV_BUILD; in dv_reset_perm_dir()
1588 rw_exit(&ddv->dv_contents); in dv_reset_perm_dir()
1870 struct dv_node *ddv, in dv_walk() argument
1881 ddv->dv_name, devnm ? devnm : "<null>")); in dv_walk()
1883 dvp = DVTOV(ddv); in dv_walk()
1889 rw_enter(&ddv->dv_contents, RW_READER); in dv_walk()
1891 for (dv = DV_FIRST_ENTRY(ddv); dv; dv = DV_NEXT_ENTRY(ddv, dv)) { in dv_walk()
1923 rw_exit(&ddv->dv_contents); in dv_walk()