Lines Matching refs:dc

49 	struct delay_c *dc = (struct delay_c *)data;  in handle_delayed_timer()  local
51 queue_work(dc->kdelayd_wq, &dc->flush_expired_bios); in handle_delayed_timer()
54 static void queue_timeout(struct delay_c *dc, unsigned long expires) in queue_timeout() argument
56 mutex_lock(&dc->timer_lock); in queue_timeout()
58 if (!timer_pending(&dc->delay_timer) || expires < dc->delay_timer.expires) in queue_timeout()
59 mod_timer(&dc->delay_timer, expires); in queue_timeout()
61 mutex_unlock(&dc->timer_lock); in queue_timeout()
76 static struct bio *flush_delayed_bios(struct delay_c *dc, int flush_all) in flush_delayed_bios() argument
84 list_for_each_entry_safe(delayed, next, &dc->delayed_bios, list) { in flush_delayed_bios()
107 queue_timeout(dc, next_expires); in flush_delayed_bios()
114 struct delay_c *dc; in flush_expired_bios() local
116 dc = container_of(work, struct delay_c, flush_expired_bios); in flush_expired_bios()
117 flush_bios(flush_delayed_bios(dc, 0)); in flush_expired_bios()
130 struct delay_c *dc; in delay_ctr() local
140 dc = kmalloc(sizeof(*dc), GFP_KERNEL); in delay_ctr()
141 if (!dc) { in delay_ctr()
146 dc->reads = dc->writes = 0; in delay_ctr()
153 dc->start_read = tmpll; in delay_ctr()
155 if (sscanf(argv[2], "%u%c", &dc->read_delay, &dummy) != 1) { in delay_ctr()
161 &dc->dev_read); in delay_ctr()
168 dc->dev_write = NULL; in delay_ctr()
176 dc->start_write = tmpll; in delay_ctr()
178 if (sscanf(argv[5], "%u%c", &dc->write_delay, &dummy) != 1) { in delay_ctr()
184 &dc->dev_write); in delay_ctr()
192 dc->kdelayd_wq = alloc_workqueue("kdelayd", WQ_MEM_RECLAIM, 0); in delay_ctr()
193 if (!dc->kdelayd_wq) { in delay_ctr()
198 setup_timer(&dc->delay_timer, handle_delayed_timer, (unsigned long)dc); in delay_ctr()
200 INIT_WORK(&dc->flush_expired_bios, flush_expired_bios); in delay_ctr()
201 INIT_LIST_HEAD(&dc->delayed_bios); in delay_ctr()
202 mutex_init(&dc->timer_lock); in delay_ctr()
203 atomic_set(&dc->may_delay, 1); in delay_ctr()
208 ti->private = dc; in delay_ctr()
212 if (dc->dev_write) in delay_ctr()
213 dm_put_device(ti, dc->dev_write); in delay_ctr()
215 dm_put_device(ti, dc->dev_read); in delay_ctr()
217 kfree(dc); in delay_ctr()
223 struct delay_c *dc = ti->private; in delay_dtr() local
225 destroy_workqueue(dc->kdelayd_wq); in delay_dtr()
227 dm_put_device(ti, dc->dev_read); in delay_dtr()
229 if (dc->dev_write) in delay_dtr()
230 dm_put_device(ti, dc->dev_write); in delay_dtr()
232 kfree(dc); in delay_dtr()
235 static int delay_bio(struct delay_c *dc, int delay, struct bio *bio) in delay_bio() argument
240 if (!delay || !atomic_read(&dc->may_delay)) in delay_bio()
245 delayed->context = dc; in delay_bio()
251 dc->writes++; in delay_bio()
253 dc->reads++; in delay_bio()
255 list_add_tail(&delayed->list, &dc->delayed_bios); in delay_bio()
259 queue_timeout(dc, expires); in delay_bio()
266 struct delay_c *dc = ti->private; in delay_presuspend() local
268 atomic_set(&dc->may_delay, 0); in delay_presuspend()
269 del_timer_sync(&dc->delay_timer); in delay_presuspend()
270 flush_bios(flush_delayed_bios(dc, 1)); in delay_presuspend()
275 struct delay_c *dc = ti->private; in delay_resume() local
277 atomic_set(&dc->may_delay, 1); in delay_resume()
282 struct delay_c *dc = ti->private; in delay_map() local
284 if ((bio_data_dir(bio) == WRITE) && (dc->dev_write)) { in delay_map()
285 bio->bi_bdev = dc->dev_write->bdev; in delay_map()
287 bio->bi_iter.bi_sector = dc->start_write + in delay_map()
290 return delay_bio(dc, dc->write_delay, bio); in delay_map()
293 bio->bi_bdev = dc->dev_read->bdev; in delay_map()
294 bio->bi_iter.bi_sector = dc->start_read + in delay_map()
297 return delay_bio(dc, dc->read_delay, bio); in delay_map()
303 struct delay_c *dc = ti->private; in delay_status() local
308 DMEMIT("%u %u", dc->reads, dc->writes); in delay_status()
312 DMEMIT("%s %llu %u", dc->dev_read->name, in delay_status()
313 (unsigned long long) dc->start_read, in delay_status()
314 dc->read_delay); in delay_status()
315 if (dc->dev_write) in delay_status()
316 DMEMIT(" %s %llu %u", dc->dev_write->name, in delay_status()
317 (unsigned long long) dc->start_write, in delay_status()
318 dc->write_delay); in delay_status()
326 struct delay_c *dc = ti->private; in delay_iterate_devices() local
329 ret = fn(ti, dc->dev_read, dc->start_read, ti->len, data); in delay_iterate_devices()
333 if (dc->dev_write) in delay_iterate_devices()
334 ret = fn(ti, dc->dev_write, dc->start_write, ti->len, data); in delay_iterate_devices()