Lines Matching refs:di

186 _init(struct dm_delay_info *di, char **argv)  in _init()  argument
196 di->pdev = dmp; in _init()
197 di->offset = atoi64(argv[1]); in _init()
199 di->delay = tmp * hz / 1000; in _init()
200 di->count = 0; in _init()
202 TAILQ_INIT(&di->buf_list); in _init()
203 callout_init(&di->cal, 0); in _init()
204 mutex_init(&di->buf_mtx, MUTEX_DEFAULT, IPL_NONE); in _init()
205 mutex_init(&di->cal_mtx, MUTEX_DEFAULT, IPL_NONE); in _init()
206 mutex_init(&di->token, MUTEX_DEFAULT, IPL_NONE); in _init()
208 di->enabled = 1; in _init()
209 if (kthread_create(PRI_NONE, 0, NULL, _thread, di, NULL, in _init()
216 _debug(di, "init"); in _init()
261 _table(struct dm_delay_info *di, char *p) in _table() argument
265 di->pdev->udev_name, di->offset, di->delay); in _table()
272 struct dm_delay_info *di; in dm_target_delay_strategy() local
278 di = &tdc->read; in dm_target_delay_strategy()
280 di = &tdc->write; in dm_target_delay_strategy()
282 if (di) { in dm_target_delay_strategy()
283 if (di->delay) { in dm_target_delay_strategy()
284 _strategy(di, bp); in dm_target_delay_strategy()
286 _submit(di, bp); in dm_target_delay_strategy()
298 _strategy(struct dm_delay_info *di, struct buf *bp) in _strategy() argument
304 dp->expire = tick + di->delay; in _strategy()
306 mutex_enter(&di->buf_mtx); in _strategy()
307 di->count++; in _strategy()
308 TAILQ_INSERT_TAIL(&di->buf_list, dp, entry); in _strategy()
309 mutex_exit(&di->buf_mtx); in _strategy()
311 mutex_enter(&di->cal_mtx); in _strategy()
312 if (!callout_pending(&di->cal)) in _strategy()
313 callout_reset(&di->cal, di->delay, _timeout, di); in _strategy()
314 mutex_exit(&di->cal_mtx); in _strategy()
318 _submit(struct dm_delay_info *di, struct buf *bp) in _submit() argument
321 _debug(di, "submit"); in _submit()
323 bp->b_blkno += di->offset; in _submit()
324 VOP_STRATEGY(di->pdev->pdev_vnode, bp); in _submit()
328 _submit_queue(struct dm_delay_info *di, int submit_all) in _submit_queue() argument
335 _debug(di, "submitq"); in _submit_queue()
338 mutex_enter(&di->buf_mtx); in _submit_queue()
339 while ((dp = TAILQ_FIRST(&di->buf_list)) != NULL) { in _submit_queue()
341 TAILQ_REMOVE(&di->buf_list, dp, entry); in _submit_queue()
343 di->count--; in _submit_queue()
353 mutex_exit(&di->buf_mtx); in _submit_queue()
356 mutex_enter(&di->cal_mtx); in _submit_queue()
357 callout_reset(&di->cal, next - tick, _timeout, di); in _submit_queue()
358 mutex_exit(&di->cal_mtx); in _submit_queue()
363 _submit(di, dp->bp); in _submit_queue()
402 _destroy(struct dm_delay_info *di) in _destroy() argument
405 _debug(di, "destroy"); in _destroy()
407 mutex_enter(&di->token); in _destroy()
408 di->enabled = 0; in _destroy()
410 mutex_enter(&di->cal_mtx); in _destroy()
411 if (callout_pending(&di->cal)) in _destroy()
412 callout_halt(&di->cal, NULL); in _destroy()
413 mutex_exit(&di->cal_mtx); in _destroy()
415 _submit_queue(di, 1); in _destroy()
416 mutex_exit(&di->token); in _destroy()
417 wakeup(di); in _destroy()
419 tsleep(&di->enabled, 0, "dmdldestroy", 0); in _destroy()
421 mutex_destroy(&di->token); in _destroy()
422 mutex_destroy(&di->cal_mtx); in _destroy()
423 mutex_destroy(&di->buf_mtx); in _destroy()
425 dm_pdev_decr(di->pdev); in _destroy()
457 struct dm_delay_info *di = arg; in _timeout() local
459 _debug(di, "timeout"); in _timeout()
460 wakeup(di); in _timeout()
466 struct dm_delay_info *di = arg; in _thread() local
468 _debug(di, "thread init"); in _thread()
469 mutex_enter(&di->token); in _thread()
471 while (di->enabled) { in _thread()
472 mutex_exit(&di->token); in _thread()
473 tsleep(di, 0, "dmdlthread", 0); in _thread()
474 _submit_queue(di, 0); in _thread()
475 mutex_enter(&di->token); in _thread()
478 mutex_exit(&di->token); in _thread()
479 wakeup(&di->enabled); in _thread()
481 _debug(di, "thread exit"); in _thread()
486 _debug(struct dm_delay_info *di, const char *msg) in _debug() argument
490 msg, di->enabled, di->pdev->name, (uintmax_t)di->offset, di->delay, in _debug()
491 di->count); in _debug()