Lines Matching refs:di

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