Lines Matching refs:bdi
47 struct backing_dev_info *bdi = m->private; in bdi_debug_stats_show() local
48 struct bdi_writeback *wb = &bdi->wb; in bdi_debug_stats_show()
69 bdi_thresh = bdi_dirty_limit(bdi, dirty_thresh); in bdi_debug_stats_show()
87 (unsigned long) K(bdi_stat(bdi, BDI_WRITEBACK)), in bdi_debug_stats_show()
88 (unsigned long) K(bdi_stat(bdi, BDI_RECLAIMABLE)), in bdi_debug_stats_show()
92 (unsigned long) K(bdi_stat(bdi, BDI_DIRTIED)), in bdi_debug_stats_show()
93 (unsigned long) K(bdi_stat(bdi, BDI_WRITTEN)), in bdi_debug_stats_show()
94 (unsigned long) K(bdi->write_bandwidth), in bdi_debug_stats_show()
99 !list_empty(&bdi->bdi_list), bdi->state); in bdi_debug_stats_show()
117 static void bdi_debug_register(struct backing_dev_info *bdi, const char *name) in bdi_debug_register() argument
119 bdi->debug_dir = debugfs_create_dir(name, bdi_debug_root); in bdi_debug_register()
120 bdi->debug_stats = debugfs_create_file("stats", 0444, bdi->debug_dir, in bdi_debug_register()
121 bdi, &bdi_debug_stats_fops); in bdi_debug_register()
124 static void bdi_debug_unregister(struct backing_dev_info *bdi) in bdi_debug_unregister() argument
126 debugfs_remove(bdi->debug_stats); in bdi_debug_unregister()
127 debugfs_remove(bdi->debug_dir); in bdi_debug_unregister()
133 static inline void bdi_debug_register(struct backing_dev_info *bdi, in bdi_debug_register() argument
137 static inline void bdi_debug_unregister(struct backing_dev_info *bdi) in bdi_debug_unregister() argument
146 struct backing_dev_info *bdi = dev_get_drvdata(dev); in read_ahead_kb_store() local
154 bdi->ra_pages = read_ahead_kb >> (PAGE_SHIFT - 10); in read_ahead_kb_store()
165 struct backing_dev_info *bdi = dev_get_drvdata(dev); \
171 BDI_SHOW(read_ahead_kb, K(bdi->ra_pages))
176 struct backing_dev_info *bdi = dev_get_drvdata(dev); in min_ratio_store() local
184 ret = bdi_set_min_ratio(bdi, ratio); in min_ratio_store()
190 BDI_SHOW(min_ratio, bdi->min_ratio)
195 struct backing_dev_info *bdi = dev_get_drvdata(dev); in max_ratio_store() local
203 ret = bdi_set_max_ratio(bdi, ratio); in max_ratio_store()
209 BDI_SHOW(max_ratio, bdi->max_ratio)
215 struct backing_dev_info *bdi = dev_get_drvdata(dev); in stable_pages_required_show() local
218 bdi_cap_stable_pages_required(bdi) ? 1 : 0); in stable_pages_required_show()
258 int bdi_has_dirty_io(struct backing_dev_info *bdi) in bdi_has_dirty_io() argument
260 return wb_has_dirty_io(&bdi->wb); in bdi_has_dirty_io()
277 void bdi_wakeup_thread_delayed(struct backing_dev_info *bdi) in bdi_wakeup_thread_delayed() argument
282 spin_lock_bh(&bdi->wb_lock); in bdi_wakeup_thread_delayed()
283 if (test_bit(BDI_registered, &bdi->state)) in bdi_wakeup_thread_delayed()
284 queue_delayed_work(bdi_wq, &bdi->wb.dwork, timeout); in bdi_wakeup_thread_delayed()
285 spin_unlock_bh(&bdi->wb_lock); in bdi_wakeup_thread_delayed()
291 static void bdi_remove_from_list(struct backing_dev_info *bdi) in bdi_remove_from_list() argument
294 list_del_rcu(&bdi->bdi_list); in bdi_remove_from_list()
300 int bdi_register(struct backing_dev_info *bdi, struct device *parent, in bdi_register() argument
306 if (bdi->dev) /* The driver needs to use separate queues per device */ in bdi_register()
310 dev = device_create_vargs(bdi_class, parent, MKDEV(0, 0), bdi, fmt, args); in bdi_register()
315 bdi->dev = dev; in bdi_register()
317 bdi_debug_register(bdi, dev_name(dev)); in bdi_register()
318 set_bit(BDI_registered, &bdi->state); in bdi_register()
321 list_add_tail_rcu(&bdi->bdi_list, &bdi_list); in bdi_register()
324 trace_writeback_bdi_register(bdi); in bdi_register()
329 int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev) in bdi_register_dev() argument
331 return bdi_register(bdi, NULL, "%u:%u", MAJOR(dev), MINOR(dev)); in bdi_register_dev()
338 static void bdi_wb_shutdown(struct backing_dev_info *bdi) in bdi_wb_shutdown() argument
341 spin_lock_bh(&bdi->wb_lock); in bdi_wb_shutdown()
342 if (!test_and_clear_bit(BDI_registered, &bdi->state)) { in bdi_wb_shutdown()
343 spin_unlock_bh(&bdi->wb_lock); in bdi_wb_shutdown()
346 spin_unlock_bh(&bdi->wb_lock); in bdi_wb_shutdown()
351 bdi_remove_from_list(bdi); in bdi_wb_shutdown()
358 mod_delayed_work(bdi_wq, &bdi->wb.dwork, 0); in bdi_wb_shutdown()
359 flush_delayed_work(&bdi->wb.dwork); in bdi_wb_shutdown()
362 static void bdi_wb_init(struct bdi_writeback *wb, struct backing_dev_info *bdi) in bdi_wb_init() argument
366 wb->bdi = bdi; in bdi_wb_init()
381 int bdi_init(struct backing_dev_info *bdi) in bdi_init() argument
385 bdi->dev = NULL; in bdi_init()
387 bdi->min_ratio = 0; in bdi_init()
388 bdi->max_ratio = 100; in bdi_init()
389 bdi->max_prop_frac = FPROP_FRAC_BASE; in bdi_init()
390 spin_lock_init(&bdi->wb_lock); in bdi_init()
391 INIT_LIST_HEAD(&bdi->bdi_list); in bdi_init()
392 INIT_LIST_HEAD(&bdi->work_list); in bdi_init()
394 bdi_wb_init(&bdi->wb, bdi); in bdi_init()
397 err = percpu_counter_init(&bdi->bdi_stat[i], 0, GFP_KERNEL); in bdi_init()
402 bdi->dirty_exceeded = 0; in bdi_init()
404 bdi->bw_time_stamp = jiffies; in bdi_init()
405 bdi->written_stamp = 0; in bdi_init()
407 bdi->balanced_dirty_ratelimit = INIT_BW; in bdi_init()
408 bdi->dirty_ratelimit = INIT_BW; in bdi_init()
409 bdi->write_bandwidth = INIT_BW; in bdi_init()
410 bdi->avg_write_bandwidth = INIT_BW; in bdi_init()
412 err = fprop_local_init_percpu(&bdi->completions, GFP_KERNEL); in bdi_init()
417 percpu_counter_destroy(&bdi->bdi_stat[i]); in bdi_init()
424 void bdi_destroy(struct backing_dev_info *bdi) in bdi_destroy() argument
428 bdi_wb_shutdown(bdi); in bdi_destroy()
429 bdi_set_min_ratio(bdi, 0); in bdi_destroy()
431 WARN_ON(!list_empty(&bdi->work_list)); in bdi_destroy()
432 WARN_ON(delayed_work_pending(&bdi->wb.dwork)); in bdi_destroy()
434 if (bdi->dev) { in bdi_destroy()
435 bdi_debug_unregister(bdi); in bdi_destroy()
436 device_unregister(bdi->dev); in bdi_destroy()
437 bdi->dev = NULL; in bdi_destroy()
441 percpu_counter_destroy(&bdi->bdi_stat[i]); in bdi_destroy()
442 fprop_local_destroy_percpu(&bdi->completions); in bdi_destroy()
450 int bdi_setup_and_register(struct backing_dev_info *bdi, char *name) in bdi_setup_and_register() argument
454 bdi->name = name; in bdi_setup_and_register()
455 bdi->capabilities = 0; in bdi_setup_and_register()
456 err = bdi_init(bdi); in bdi_setup_and_register()
460 err = bdi_register(bdi, NULL, "%.28s-%ld", name, in bdi_setup_and_register()
463 bdi_destroy(bdi); in bdi_setup_and_register()
477 void clear_bdi_congested(struct backing_dev_info *bdi, int sync) in clear_bdi_congested() argument
483 if (test_and_clear_bit(bit, &bdi->state)) in clear_bdi_congested()
491 void set_bdi_congested(struct backing_dev_info *bdi, int sync) in set_bdi_congested() argument
496 if (!test_and_set_bit(bit, &bdi->state)) in set_bdi_congested()