Lines Matching refs:cb

65 static void		md_free_cirbuf(cirbuf_ic_t *cb);
130 md_alloc_wrbuf(cirbuf_ic_t *cb, size_t bufsize)
138 if (cb->cb_nb)
139 md_free_cirbuf(cb);
141 bzero((caddr_t)cb, sizeof (*cb));
142 rw_init(&cb->cb_rwlock.lock, NULL, RW_DRIVER, NULL);
144 rw_enter(&cb->cb_rwlock.lock, RW_WRITER);
154 bp->b_forw = cb->cb_free;
155 cb->cb_free = bp;
160 cb->cb_va = md_trans_alloc(bufsize);
161 cb->cb_nb = bufsize;
166 bp = cb->cb_free;
167 cb->cb_free = bp->b_forw;
171 cb->cb_bp = bp;
172 bp->b_un.b_addr = cb->cb_va;
173 bp->b_bufsize = cb->cb_nb;
175 rw_exit(&cb->cb_rwlock.lock);
179 md_alloc_rdbuf(cirbuf_ic_t *cb, size_t bufsize, size_t blksize)
188 if (cb->cb_nb)
189 md_free_cirbuf(cb);
191 bzero((caddr_t)cb, sizeof (*cb));
192 rw_init(&cb->cb_rwlock.lock, NULL, RW_DRIVER, NULL);
194 rw_enter(&cb->cb_rwlock.lock, RW_WRITER);
196 cb->cb_va = md_trans_alloc(bufsize);
197 cb->cb_nb = bufsize;
204 va = cb->cb_va;
215 if (cb->cb_bp) {
216 bp->b_forw = cb->cb_bp->b_forw;
217 bp->b_back = cb->cb_bp;
218 cb->cb_bp->b_forw->b_back = bp;
219 cb->cb_bp->b_forw = bp;
222 cb->cb_bp = bp;
230 rw_exit(&cb->cb_rwlock.lock);
235 md_free_cirbuf(cirbuf_ic_t *cb)
239 if (cb->cb_nb == 0)
242 rw_enter(&cb->cb_rwlock.lock, RW_WRITER);
243 ASSERT(cb->cb_dirty == NULL);
248 while ((bp = cb->cb_bp) != NULL) {
250 cb->cb_bp = NULL;
252 cb->cb_bp = bp->b_forw;
263 while ((bp = cb->cb_free) != NULL) {
264 cb->cb_free = bp->b_forw;
269 md_trans_free(cb->cb_va, cb->cb_nb);
270 cb->cb_va = NULL;
271 cb->cb_nb = 0;
272 rw_exit(&cb->cb_rwlock.lock);
273 rw_destroy(&cb->cb_rwlock.lock);