Lines Matching defs:cwdi
51 struct cwdinfo *cwdi;
54 cwdi = kmem_alloc(sizeof(*cwdi), KM_SLEEP);
55 KASSERT(ALIGNED_POINTER(cwdi, COHERENCY_UNIT));
56 rw_init(&cwdi->cwdi_lock);
60 cwdi->cwdi_cdir = copy->cwdi_cdir;
61 if (cwdi->cwdi_cdir)
62 vref(cwdi->cwdi_cdir);
63 cwdi->cwdi_rdir = copy->cwdi_rdir;
64 if (cwdi->cwdi_rdir)
65 vref(cwdi->cwdi_rdir);
66 cwdi->cwdi_edir = copy->cwdi_edir;
67 if (cwdi->cwdi_edir)
68 vref(cwdi->cwdi_edir);
71 cwdi->cwdi_cmask = copy->cwdi_cmask;
72 cwdi->cwdi_refcnt = 1;
74 return cwdi;
83 struct cwdinfo *cwdi;
85 cwdi = curproc->p_cwdi;
87 atomic_inc_uint(&cwdi->cwdi_refcnt);
88 p2->p_cwdi = cwdi;
92 * Make sure proc has only one reference to its cwdi, creating
98 struct cwdinfo *cwdi = p->p_cwdi;
100 if (cwdi->cwdi_refcnt > 1) {
101 cwdi = cwdinit();
103 p->p_cwdi = cwdi;
111 cwdfree(struct cwdinfo *cwdi)
115 if (atomic_dec_uint_nv(&cwdi->cwdi_refcnt) > 0)
119 vrele(cwdi->cwdi_cdir);
120 rw_destroy(&cwdi->cwdi_lock);
121 if (cwdi->cwdi_rdir)
122 vrele(cwdi->cwdi_rdir);
123 if (cwdi->cwdi_edir)
124 vrele(cwdi->cwdi_edir);
125 kmem_free(cwdi, sizeof(*cwdi));