~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/mm/backing-dev.c

Version: ~ [ linux-5.5-rc1 ] ~ [ linux-5.4.2 ] ~ [ linux-5.3.15 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.88 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.158 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.206 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.206 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.78 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 
  2 #include <linux/wait.h>
  3 #include <linux/backing-dev.h>
  4 #include <linux/kthread.h>
  5 #include <linux/freezer.h>
  6 #include <linux/fs.h>
  7 #include <linux/pagemap.h>
  8 #include <linux/mm.h>
  9 #include <linux/sched.h>
 10 #include <linux/module.h>
 11 #include <linux/writeback.h>
 12 #include <linux/device.h>
 13 #include <trace/events/writeback.h>
 14 
 15 static atomic_long_t bdi_seq = ATOMIC_LONG_INIT(0);
 16 
 17 struct backing_dev_info default_backing_dev_info = {
 18         .name           = "default",
 19         .ra_pages       = VM_MAX_READAHEAD * 1024 / PAGE_CACHE_SIZE,
 20         .state          = 0,
 21         .capabilities   = BDI_CAP_MAP_COPY,
 22 };
 23 EXPORT_SYMBOL_GPL(default_backing_dev_info);
 24 
 25 struct backing_dev_info noop_backing_dev_info = {
 26         .name           = "noop",
 27         .capabilities   = BDI_CAP_NO_ACCT_AND_WRITEBACK,
 28 };
 29 EXPORT_SYMBOL_GPL(noop_backing_dev_info);
 30 
 31 static struct class *bdi_class;
 32 
 33 /*
 34  * bdi_lock protects updates to bdi_list and bdi_pending_list, as well as
 35  * reader side protection for bdi_pending_list. bdi_list has RCU reader side
 36  * locking.
 37  */
 38 DEFINE_SPINLOCK(bdi_lock);
 39 LIST_HEAD(bdi_list);
 40 LIST_HEAD(bdi_pending_list);
 41 
 42 void bdi_lock_two(struct bdi_writeback *wb1, struct bdi_writeback *wb2)
 43 {
 44         if (wb1 < wb2) {
 45                 spin_lock(&wb1->list_lock);
 46                 spin_lock_nested(&wb2->list_lock, 1);
 47         } else {
 48                 spin_lock(&wb2->list_lock);
 49                 spin_lock_nested(&wb1->list_lock, 1);
 50         }
 51 }
 52 
 53 #ifdef CONFIG_DEBUG_FS
 54 #include <linux/debugfs.h>
 55 #include <linux/seq_file.h>
 56 
 57 static struct dentry *bdi_debug_root;
 58 
 59 static void bdi_debug_init(void)
 60 {
 61         bdi_debug_root = debugfs_create_dir("bdi", NULL);
 62 }
 63 
 64 static int bdi_debug_stats_show(struct seq_file *m, void *v)
 65 {
 66         struct backing_dev_info *bdi = m->private;
 67         struct bdi_writeback *wb = &bdi->wb;
 68         unsigned long background_thresh;
 69         unsigned long dirty_thresh;
 70         unsigned long bdi_thresh;
 71         unsigned long nr_dirty, nr_io, nr_more_io;
 72         struct inode *inode;
 73 
 74         nr_dirty = nr_io = nr_more_io = 0;
 75         spin_lock(&wb->list_lock);
 76         list_for_each_entry(inode, &wb->b_dirty, i_wb_list)
 77                 nr_dirty++;
 78         list_for_each_entry(inode, &wb->b_io, i_wb_list)
 79                 nr_io++;
 80         list_for_each_entry(inode, &wb->b_more_io, i_wb_list)
 81                 nr_more_io++;
 82         spin_unlock(&wb->list_lock);
 83 
 84         global_dirty_limits(&background_thresh, &dirty_thresh);
 85         bdi_thresh = bdi_dirty_limit(bdi, dirty_thresh);
 86 
 87 #define K(x) ((x) << (PAGE_SHIFT - 10))
 88         seq_printf(m,
 89                    "BdiWriteback:       %10lu kB\n"
 90                    "BdiReclaimable:     %10lu kB\n"
 91                    "BdiDirtyThresh:     %10lu kB\n"
 92                    "DirtyThresh:        %10lu kB\n"
 93                    "BackgroundThresh:   %10lu kB\n"
 94                    "BdiDirtied:         %10lu kB\n"
 95                    "BdiWritten:         %10lu kB\n"
 96                    "BdiWriteBandwidth:  %10lu kBps\n"
 97                    "b_dirty:            %10lu\n"
 98                    "b_io:               %10lu\n"
 99                    "b_more_io:          %10lu\n"
100                    "bdi_list:           %10u\n"
101                    "state:              %10lx\n",
102                    (unsigned long) K(bdi_stat(bdi, BDI_WRITEBACK)),
103                    (unsigned long) K(bdi_stat(bdi, BDI_RECLAIMABLE)),
104                    K(bdi_thresh),
105                    K(dirty_thresh),
106                    K(background_thresh),
107                    (unsigned long) K(bdi_stat(bdi, BDI_DIRTIED)),
108                    (unsigned long) K(bdi_stat(bdi, BDI_WRITTEN)),
109                    (unsigned long) K(bdi->write_bandwidth),
110                    nr_dirty,
111                    nr_io,
112                    nr_more_io,
113                    !list_empty(&bdi->bdi_list), bdi->state);
114 #undef K
115 
116         return 0;
117 }
118 
119 static int bdi_debug_stats_open(struct inode *inode, struct file *file)
120 {
121         return single_open(file, bdi_debug_stats_show, inode->i_private);
122 }
123 
124 static const struct file_operations bdi_debug_stats_fops = {
125         .open           = bdi_debug_stats_open,
126         .read           = seq_read,
127         .llseek         = seq_lseek,
128         .release        = single_release,
129 };
130 
131 static void bdi_debug_register(struct backing_dev_info *bdi, const char *name)
132 {
133         bdi->debug_dir = debugfs_create_dir(name, bdi_debug_root);
134         bdi->debug_stats = debugfs_create_file("stats", 0444, bdi->debug_dir,
135                                                bdi, &bdi_debug_stats_fops);
136 }
137 
138 static void bdi_debug_unregister(struct backing_dev_info *bdi)
139 {
140         debugfs_remove(bdi->debug_stats);
141         debugfs_remove(bdi->debug_dir);
142 }
143 #else
144 static inline void bdi_debug_init(void)
145 {
146 }
147 static inline void bdi_debug_register(struct backing_dev_info *bdi,
148                                       const char *name)
149 {
150 }
151 static inline void bdi_debug_unregister(struct backing_dev_info *bdi)
152 {
153 }
154 #endif
155 
156 static ssize_t read_ahead_kb_store(struct device *dev,
157                                   struct device_attribute *attr,
158                                   const char *buf, size_t count)
159 {
160         struct backing_dev_info *bdi = dev_get_drvdata(dev);
161         unsigned long read_ahead_kb;
162         ssize_t ret;
163 
164         ret = kstrtoul(buf, 10, &read_ahead_kb);
165         if (ret < 0)
166                 return ret;
167 
168         bdi->ra_pages = read_ahead_kb >> (PAGE_SHIFT - 10);
169 
170         return count;
171 }
172 
173 #define K(pages) ((pages) << (PAGE_SHIFT - 10))
174 
175 #define BDI_SHOW(name, expr)                                            \
176 static ssize_t name##_show(struct device *dev,                          \
177                            struct device_attribute *attr, char *page)   \
178 {                                                                       \
179         struct backing_dev_info *bdi = dev_get_drvdata(dev);            \
180                                                                         \
181         return snprintf(page, PAGE_SIZE-1, "%lld\n", (long long)expr);  \
182 }
183 
184 BDI_SHOW(read_ahead_kb, K(bdi->ra_pages))
185 
186 static ssize_t min_ratio_store(struct device *dev,
187                 struct device_attribute *attr, const char *buf, size_t count)
188 {
189         struct backing_dev_info *bdi = dev_get_drvdata(dev);
190         unsigned int ratio;
191         ssize_t ret;
192 
193         ret = kstrtouint(buf, 10, &ratio);
194         if (ret < 0)
195                 return ret;
196 
197         ret = bdi_set_min_ratio(bdi, ratio);
198         if (!ret)
199                 ret = count;
200 
201         return ret;
202 }
203 BDI_SHOW(min_ratio, bdi->min_ratio)
204 
205 static ssize_t max_ratio_store(struct device *dev,
206                 struct device_attribute *attr, const char *buf, size_t count)
207 {
208         struct backing_dev_info *bdi = dev_get_drvdata(dev);
209         unsigned int ratio;
210         ssize_t ret;
211 
212         ret = kstrtouint(buf, 10, &ratio);
213         if (ret < 0)
214                 return ret;
215 
216         ret = bdi_set_max_ratio(bdi, ratio);
217         if (!ret)
218                 ret = count;
219 
220         return ret;
221 }
222 BDI_SHOW(max_ratio, bdi->max_ratio)
223 
224 static ssize_t stable_pages_required_show(struct device *dev,
225                                           struct device_attribute *attr,
226                                           char *page)
227 {
228         struct backing_dev_info *bdi = dev_get_drvdata(dev);
229 
230         return snprintf(page, PAGE_SIZE-1, "%d\n",
231                         bdi_cap_stable_pages_required(bdi) ? 1 : 0);
232 }
233 
234 #define __ATTR_RW(attr) __ATTR(attr, 0644, attr##_show, attr##_store)
235 
236 static struct device_attribute bdi_dev_attrs[] = {
237         __ATTR_RW(read_ahead_kb),
238         __ATTR_RW(min_ratio),
239         __ATTR_RW(max_ratio),
240         __ATTR_RO(stable_pages_required),
241         __ATTR_NULL,
242 };
243 
244 static __init int bdi_class_init(void)
245 {
246         bdi_class = class_create(THIS_MODULE, "bdi");
247         if (IS_ERR(bdi_class))
248                 return PTR_ERR(bdi_class);
249 
250         bdi_class->dev_attrs = bdi_dev_attrs;
251         bdi_debug_init();
252         return 0;
253 }
254 postcore_initcall(bdi_class_init);
255 
256 static int __init default_bdi_init(void)
257 {
258         int err;
259 
260         err = bdi_init(&default_backing_dev_info);
261         if (!err)
262                 bdi_register(&default_backing_dev_info, NULL, "default");
263         err = bdi_init(&noop_backing_dev_info);
264 
265         return err;
266 }
267 subsys_initcall(default_bdi_init);
268 
269 int bdi_has_dirty_io(struct backing_dev_info *bdi)
270 {
271         return wb_has_dirty_io(&bdi->wb);
272 }
273 
274 static void wakeup_timer_fn(unsigned long data)
275 {
276         struct backing_dev_info *bdi = (struct backing_dev_info *)data;
277 
278         spin_lock_bh(&bdi->wb_lock);
279         if (bdi->wb.task) {
280                 trace_writeback_wake_thread(bdi);
281                 wake_up_process(bdi->wb.task);
282         } else if (bdi->dev) {
283                 /*
284                  * When bdi tasks are inactive for long time, they are killed.
285                  * In this case we have to wake-up the forker thread which
286                  * should create and run the bdi thread.
287                  */
288                 trace_writeback_wake_forker_thread(bdi);
289                 wake_up_process(default_backing_dev_info.wb.task);
290         }
291         spin_unlock_bh(&bdi->wb_lock);
292 }
293 
294 /*
295  * This function is used when the first inode for this bdi is marked dirty. It
296  * wakes-up the corresponding bdi thread which should then take care of the
297  * periodic background write-out of dirty inodes. Since the write-out would
298  * starts only 'dirty_writeback_interval' centisecs from now anyway, we just
299  * set up a timer which wakes the bdi thread up later.
300  *
301  * Note, we wouldn't bother setting up the timer, but this function is on the
302  * fast-path (used by '__mark_inode_dirty()'), so we save few context switches
303  * by delaying the wake-up.
304  */
305 void bdi_wakeup_thread_delayed(struct backing_dev_info *bdi)
306 {
307         unsigned long timeout;
308 
309         timeout = msecs_to_jiffies(dirty_writeback_interval * 10);
310         mod_timer(&bdi->wb.wakeup_timer, jiffies + timeout);
311 }
312 
313 /*
314  * Calculate the longest interval (jiffies) bdi threads are allowed to be
315  * inactive.
316  */
317 static unsigned long bdi_longest_inactive(void)
318 {
319         unsigned long interval;
320 
321         interval = msecs_to_jiffies(dirty_writeback_interval * 10);
322         return max(5UL * 60 * HZ, interval);
323 }
324 
325 /*
326  * Clear pending bit and wakeup anybody waiting for flusher thread creation or
327  * shutdown
328  */
329 static void bdi_clear_pending(struct backing_dev_info *bdi)
330 {
331         clear_bit(BDI_pending, &bdi->state);
332         smp_mb__after_clear_bit();
333         wake_up_bit(&bdi->state, BDI_pending);
334 }
335 
336 static int bdi_forker_thread(void *ptr)
337 {
338         struct bdi_writeback *me = ptr;
339 
340         current->flags |= PF_SWAPWRITE;
341         set_freezable();
342 
343         /*
344          * Our parent may run at a different priority, just set us to normal
345          */
346         set_user_nice(current, 0);
347 
348         for (;;) {
349                 struct task_struct *task = NULL;
350                 struct backing_dev_info *bdi;
351                 enum {
352                         NO_ACTION,   /* Nothing to do */
353                         FORK_THREAD, /* Fork bdi thread */
354                         KILL_THREAD, /* Kill inactive bdi thread */
355                 } action = NO_ACTION;
356 
357                 /*
358                  * Temporary measure, we want to make sure we don't see
359                  * dirty data on the default backing_dev_info
360                  */
361                 if (wb_has_dirty_io(me) || !list_empty(&me->bdi->work_list)) {
362                         del_timer(&me->wakeup_timer);
363                         wb_do_writeback(me, 0);
364                 }
365 
366                 spin_lock_bh(&bdi_lock);
367                 /*
368                  * In the following loop we are going to check whether we have
369                  * some work to do without any synchronization with tasks
370                  * waking us up to do work for them. Set the task state here
371                  * so that we don't miss wakeups after verifying conditions.
372                  */
373                 set_current_state(TASK_INTERRUPTIBLE);
374 
375                 list_for_each_entry(bdi, &bdi_list, bdi_list) {
376                         bool have_dirty_io;
377 
378                         if (!bdi_cap_writeback_dirty(bdi) ||
379                              bdi_cap_flush_forker(bdi))
380                                 continue;
381 
382                         WARN(!test_bit(BDI_registered, &bdi->state),
383                              "bdi %p/%s is not registered!\n", bdi, bdi->name);
384 
385                         have_dirty_io = !list_empty(&bdi->work_list) ||
386                                         wb_has_dirty_io(&bdi->wb);
387 
388                         /*
389                          * If the bdi has work to do, but the thread does not
390                          * exist - create it.
391                          */
392                         if (!bdi->wb.task && have_dirty_io) {
393                                 /*
394                                  * Set the pending bit - if someone will try to
395                                  * unregister this bdi - it'll wait on this bit.
396                                  */
397                                 set_bit(BDI_pending, &bdi->state);
398                                 action = FORK_THREAD;
399                                 break;
400                         }
401 
402                         spin_lock(&bdi->wb_lock);
403 
404                         /*
405                          * If there is no work to do and the bdi thread was
406                          * inactive long enough - kill it. The wb_lock is taken
407                          * to make sure no-one adds more work to this bdi and
408                          * wakes the bdi thread up.
409                          */
410                         if (bdi->wb.task && !have_dirty_io &&
411                             time_after(jiffies, bdi->wb.last_active +
412                                                 bdi_longest_inactive())) {
413                                 task = bdi->wb.task;
414                                 bdi->wb.task = NULL;
415                                 spin_unlock(&bdi->wb_lock);
416                                 set_bit(BDI_pending, &bdi->state);
417                                 action = KILL_THREAD;
418                                 break;
419                         }
420                         spin_unlock(&bdi->wb_lock);
421                 }
422                 spin_unlock_bh(&bdi_lock);
423 
424                 /* Keep working if default bdi still has things to do */
425                 if (!list_empty(&me->bdi->work_list))
426                         __set_current_state(TASK_RUNNING);
427 
428                 switch (action) {
429                 case FORK_THREAD:
430                         __set_current_state(TASK_RUNNING);
431                         task = kthread_create(bdi_writeback_thread, &bdi->wb,
432                                               "flush-%s", dev_name(bdi->dev));
433                         if (IS_ERR(task)) {
434                                 /*
435                                  * If thread creation fails, force writeout of
436                                  * the bdi from the thread. Hopefully 1024 is
437                                  * large enough for efficient IO.
438                                  */
439                                 writeback_inodes_wb(&bdi->wb, 1024,
440                                                     WB_REASON_FORKER_THREAD);
441                         } else {
442                                 /*
443                                  * The spinlock makes sure we do not lose
444                                  * wake-ups when racing with 'bdi_queue_work()'.
445                                  * And as soon as the bdi thread is visible, we
446                                  * can start it.
447                                  */
448                                 spin_lock_bh(&bdi->wb_lock);
449                                 bdi->wb.task = task;
450                                 spin_unlock_bh(&bdi->wb_lock);
451                                 wake_up_process(task);
452                         }
453                         bdi_clear_pending(bdi);
454                         break;
455 
456                 case KILL_THREAD:
457                         __set_current_state(TASK_RUNNING);
458                         kthread_stop(task);
459                         bdi_clear_pending(bdi);
460                         break;
461 
462                 case NO_ACTION:
463                         if (!wb_has_dirty_io(me) || !dirty_writeback_interval)
464                                 /*
465                                  * There are no dirty data. The only thing we
466                                  * should now care about is checking for
467                                  * inactive bdi threads and killing them. Thus,
468                                  * let's sleep for longer time, save energy and
469                                  * be friendly for battery-driven devices.
470                                  */
471                                 schedule_timeout(bdi_longest_inactive());
472                         else
473                                 schedule_timeout(msecs_to_jiffies(dirty_writeback_interval * 10));
474                         try_to_freeze();
475                         break;
476                 }
477         }
478 
479         return 0;
480 }
481 
482 /*
483  * Remove bdi from bdi_list, and ensure that it is no longer visible
484  */
485 static void bdi_remove_from_list(struct backing_dev_info *bdi)
486 {
487         spin_lock_bh(&bdi_lock);
488         list_del_rcu(&bdi->bdi_list);
489         spin_unlock_bh(&bdi_lock);
490 
491         synchronize_rcu_expedited();
492 }
493 
494 int bdi_register(struct backing_dev_info *bdi, struct device *parent,
495                 const char *fmt, ...)
496 {
497         va_list args;
498         struct device *dev;
499 
500         if (bdi->dev)   /* The driver needs to use separate queues per device */
501                 return 0;
502 
503         va_start(args, fmt);
504         dev = device_create_vargs(bdi_class, parent, MKDEV(0, 0), bdi, fmt, args);
505         va_end(args);
506         if (IS_ERR(dev))
507                 return PTR_ERR(dev);
508 
509         bdi->dev = dev;
510 
511         /*
512          * Just start the forker thread for our default backing_dev_info,
513          * and add other bdi's to the list. They will get a thread created
514          * on-demand when they need it.
515          */
516         if (bdi_cap_flush_forker(bdi)) {
517                 struct bdi_writeback *wb = &bdi->wb;
518 
519                 wb->task = kthread_run(bdi_forker_thread, wb, "bdi-%s",
520                                                 dev_name(dev));
521                 if (IS_ERR(wb->task))
522                         return PTR_ERR(wb->task);
523         }
524 
525         bdi_debug_register(bdi, dev_name(dev));
526         set_bit(BDI_registered, &bdi->state);
527 
528         spin_lock_bh(&bdi_lock);
529         list_add_tail_rcu(&bdi->bdi_list, &bdi_list);
530         spin_unlock_bh(&bdi_lock);
531 
532         trace_writeback_bdi_register(bdi);
533         return 0;
534 }
535 EXPORT_SYMBOL(bdi_register);
536 
537 int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev)
538 {
539         return bdi_register(bdi, NULL, "%u:%u", MAJOR(dev), MINOR(dev));
540 }
541 EXPORT_SYMBOL(bdi_register_dev);
542 
543 /*
544  * Remove bdi from the global list and shutdown any threads we have running
545  */
546 static void bdi_wb_shutdown(struct backing_dev_info *bdi)
547 {
548         struct task_struct *task;
549 
550         if (!bdi_cap_writeback_dirty(bdi))
551                 return;
552 
553         /*
554          * Make sure nobody finds us on the bdi_list anymore
555          */
556         bdi_remove_from_list(bdi);
557 
558         /*
559          * If setup is pending, wait for that to complete first
560          */
561         wait_on_bit(&bdi->state, BDI_pending, bdi_sched_wait,
562                         TASK_UNINTERRUPTIBLE);
563 
564         /*
565          * Finally, kill the kernel thread. We don't need to be RCU
566          * safe anymore, since the bdi is gone from visibility.
567          */
568         spin_lock_bh(&bdi->wb_lock);
569         task = bdi->wb.task;
570         bdi->wb.task = NULL;
571         spin_unlock_bh(&bdi->wb_lock);
572 
573         if (task)
574                 kthread_stop(task);
575 }
576 
577 /*
578  * This bdi is going away now, make sure that no super_blocks point to it
579  */
580 static void bdi_prune_sb(struct backing_dev_info *bdi)
581 {
582         struct super_block *sb;
583 
584         spin_lock(&sb_lock);
585         list_for_each_entry(sb, &super_blocks, s_list) {
586                 if (sb->s_bdi == bdi)
587                         sb->s_bdi = &default_backing_dev_info;
588         }
589         spin_unlock(&sb_lock);
590 }
591 
592 void bdi_unregister(struct backing_dev_info *bdi)
593 {
594         struct device *dev = bdi->dev;
595 
596         if (dev) {
597                 bdi_set_min_ratio(bdi, 0);
598                 trace_writeback_bdi_unregister(bdi);
599                 bdi_prune_sb(bdi);
600                 del_timer_sync(&bdi->wb.wakeup_timer);
601 
602                 if (!bdi_cap_flush_forker(bdi))
603                         bdi_wb_shutdown(bdi);
604                 bdi_debug_unregister(bdi);
605 
606                 spin_lock_bh(&bdi->wb_lock);
607                 bdi->dev = NULL;
608                 spin_unlock_bh(&bdi->wb_lock);
609 
610                 device_unregister(dev);
611         }
612 }
613 EXPORT_SYMBOL(bdi_unregister);
614 
615 static void bdi_wb_init(struct bdi_writeback *wb, struct backing_dev_info *bdi)
616 {
617         memset(wb, 0, sizeof(*wb));
618 
619         wb->bdi = bdi;
620         wb->last_old_flush = jiffies;
621         INIT_LIST_HEAD(&wb->b_dirty);
622         INIT_LIST_HEAD(&wb->b_io);
623         INIT_LIST_HEAD(&wb->b_more_io);
624         spin_lock_init(&wb->list_lock);
625         setup_timer(&wb->wakeup_timer, wakeup_timer_fn, (unsigned long)bdi);
626 }
627 
628 /*
629  * Initial write bandwidth: 100 MB/s
630  */
631 #define INIT_BW         (100 << (20 - PAGE_SHIFT))
632 
633 int bdi_init(struct backing_dev_info *bdi)
634 {
635         int i, err;
636 
637         bdi->dev = NULL;
638 
639         bdi->min_ratio = 0;
640         bdi->max_ratio = 100;
641         bdi->max_prop_frac = FPROP_FRAC_BASE;
642         spin_lock_init(&bdi->wb_lock);
643         INIT_LIST_HEAD(&bdi->bdi_list);
644         INIT_LIST_HEAD(&bdi->work_list);
645 
646         bdi_wb_init(&bdi->wb, bdi);
647 
648         for (i = 0; i < NR_BDI_STAT_ITEMS; i++) {
649                 err = percpu_counter_init(&bdi->bdi_stat[i], 0);
650                 if (err)
651                         goto err;
652         }
653 
654         bdi->dirty_exceeded = 0;
655 
656         bdi->bw_time_stamp = jiffies;
657         bdi->written_stamp = 0;
658 
659         bdi->balanced_dirty_ratelimit = INIT_BW;
660         bdi->dirty_ratelimit = INIT_BW;
661         bdi->write_bandwidth = INIT_BW;
662         bdi->avg_write_bandwidth = INIT_BW;
663 
664         err = fprop_local_init_percpu(&bdi->completions);
665 
666         if (err) {
667 err:
668                 while (i--)
669                         percpu_counter_destroy(&bdi->bdi_stat[i]);
670         }
671 
672         return err;
673 }
674 EXPORT_SYMBOL(bdi_init);
675 
676 void bdi_destroy(struct backing_dev_info *bdi)
677 {
678         int i;
679 
680         /*
681          * Splice our entries to the default_backing_dev_info, if this
682          * bdi disappears
683          */
684         if (bdi_has_dirty_io(bdi)) {
685                 struct bdi_writeback *dst = &default_backing_dev_info.wb;
686 
687                 bdi_lock_two(&bdi->wb, dst);
688                 list_splice(&bdi->wb.b_dirty, &dst->b_dirty);
689                 list_splice(&bdi->wb.b_io, &dst->b_io);
690                 list_splice(&bdi->wb.b_more_io, &dst->b_more_io);
691                 spin_unlock(&bdi->wb.list_lock);
692                 spin_unlock(&dst->list_lock);
693         }
694 
695         bdi_unregister(bdi);
696 
697         /*
698          * If bdi_unregister() had already been called earlier, the
699          * wakeup_timer could still be armed because bdi_prune_sb()
700          * can race with the bdi_wakeup_thread_delayed() calls from
701          * __mark_inode_dirty().
702          */
703         del_timer_sync(&bdi->wb.wakeup_timer);
704 
705         for (i = 0; i < NR_BDI_STAT_ITEMS; i++)
706                 percpu_counter_destroy(&bdi->bdi_stat[i]);
707 
708         fprop_local_destroy_percpu(&bdi->completions);
709 }
710 EXPORT_SYMBOL(bdi_destroy);
711 
712 /*
713  * For use from filesystems to quickly init and register a bdi associated
714  * with dirty writeback
715  */
716 int bdi_setup_and_register(struct backing_dev_info *bdi, char *name,
717                            unsigned int cap)
718 {
719         char tmp[32];
720         int err;
721 
722         bdi->name = name;
723         bdi->capabilities = cap;
724         err = bdi_init(bdi);
725         if (err)
726                 return err;
727 
728         sprintf(tmp, "%.28s%s", name, "-%d");
729         err = bdi_register(bdi, NULL, tmp, atomic_long_inc_return(&bdi_seq));
730         if (err) {
731                 bdi_destroy(bdi);
732                 return err;
733         }
734 
735         return 0;
736 }
737 EXPORT_SYMBOL(bdi_setup_and_register);
738 
739 static wait_queue_head_t congestion_wqh[2] = {
740                 __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]),
741                 __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[1])
742         };
743 static atomic_t nr_bdi_congested[2];
744 
745 void clear_bdi_congested(struct backing_dev_info *bdi, int sync)
746 {
747         enum bdi_state bit;
748         wait_queue_head_t *wqh = &congestion_wqh[sync];
749 
750         bit = sync ? BDI_sync_congested : BDI_async_congested;
751         if (test_and_clear_bit(bit, &bdi->state))
752                 atomic_dec(&nr_bdi_congested[sync]);
753         smp_mb__after_clear_bit();
754         if (waitqueue_active(wqh))
755                 wake_up(wqh);
756 }
757 EXPORT_SYMBOL(clear_bdi_congested);
758 
759 void set_bdi_congested(struct backing_dev_info *bdi, int sync)
760 {
761         enum bdi_state bit;
762 
763         bit = sync ? BDI_sync_congested : BDI_async_congested;
764         if (!test_and_set_bit(bit, &bdi->state))
765                 atomic_inc(&nr_bdi_congested[sync]);
766 }
767 EXPORT_SYMBOL(set_bdi_congested);
768 
769 /**
770  * congestion_wait - wait for a backing_dev to become uncongested
771  * @sync: SYNC or ASYNC IO
772  * @timeout: timeout in jiffies
773  *
774  * Waits for up to @timeout jiffies for a backing_dev (any backing_dev) to exit
775  * write congestion.  If no backing_devs are congested then just wait for the
776  * next write to be completed.
777  */
778 long congestion_wait(int sync, long timeout)
779 {
780         long ret;
781         unsigned long start = jiffies;
782         DEFINE_WAIT(wait);
783         wait_queue_head_t *wqh = &congestion_wqh[sync];
784 
785         prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
786         ret = io_schedule_timeout(timeout);
787         finish_wait(wqh, &wait);
788 
789         trace_writeback_congestion_wait(jiffies_to_usecs(timeout),
790                                         jiffies_to_usecs(jiffies - start));
791 
792         return ret;
793 }
794 EXPORT_SYMBOL(congestion_wait);
795 
796 /**
797  * wait_iff_congested - Conditionally wait for a backing_dev to become uncongested or a zone to complete writes
798  * @zone: A zone to check if it is heavily congested
799  * @sync: SYNC or ASYNC IO
800  * @timeout: timeout in jiffies
801  *
802  * In the event of a congested backing_dev (any backing_dev) and the given
803  * @zone has experienced recent congestion, this waits for up to @timeout
804  * jiffies for either a BDI to exit congestion of the given @sync queue
805  * or a write to complete.
806  *
807  * In the absence of zone congestion, cond_resched() is called to yield
808  * the processor if necessary but otherwise does not sleep.
809  *
810  * The return value is 0 if the sleep is for the full timeout. Otherwise,
811  * it is the number of jiffies that were still remaining when the function
812  * returned. return_value == timeout implies the function did not sleep.
813  */
814 long wait_iff_congested(struct zone *zone, int sync, long timeout)
815 {
816         long ret;
817         unsigned long start = jiffies;
818         DEFINE_WAIT(wait);
819         wait_queue_head_t *wqh = &congestion_wqh[sync];
820 
821         /*
822          * If there is no congestion, or heavy congestion is not being
823          * encountered in the current zone, yield if necessary instead
824          * of sleeping on the congestion queue
825          */
826         if (atomic_read(&nr_bdi_congested[sync]) == 0 ||
827                         !zone_is_reclaim_congested(zone)) {
828                 cond_resched();
829 
830                 /* In case we scheduled, work out time remaining */
831                 ret = timeout - (jiffies - start);
832                 if (ret < 0)
833                         ret = 0;
834 
835                 goto out;
836         }
837 
838         /* Sleep until uncongested or a write happens */
839         prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
840         ret = io_schedule_timeout(timeout);
841         finish_wait(wqh, &wait);
842 
843 out:
844         trace_writeback_wait_iff_congested(jiffies_to_usecs(timeout),
845                                         jiffies_to_usecs(jiffies - start));
846 
847         return ret;
848 }
849 EXPORT_SYMBOL(wait_iff_congested);
850 
851 int pdflush_proc_obsolete(struct ctl_table *table, int write,
852                         void __user *buffer, size_t *lenp, loff_t *ppos)
853 {
854         char kbuf[] = "\n";
855 
856         if (*ppos) {
857                 *lenp = 0;
858                 return 0;
859         }
860 
861         if (copy_to_user(buffer, kbuf, sizeof(kbuf)))
862                 return -EFAULT;
863         printk_once(KERN_WARNING "%s exported in /proc is scheduled for removal\n",
864                         table->procname);
865 
866         *lenp = 2;
867         *ppos += *lenp;
868         return 2;
869 }
870 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp