1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <linux/kernel.h>
17#include <linux/module.h>
18#include <linux/spinlock.h>
19#include <linux/slab.h>
20#include <linux/sched.h>
21#include <linux/fs.h>
22#include <linux/mm.h>
23#include <linux/kthread.h>
24#include <linux/freezer.h>
25#include <linux/writeback.h>
26#include <linux/blkdev.h>
27#include <linux/backing-dev.h>
28#include <linux/buffer_head.h>
29#include <linux/tracepoint.h>
30#include "internal.h"
31
32
33
34
35struct wb_writeback_work {
36 long nr_pages;
37 struct super_block *sb;
38 enum writeback_sync_modes sync_mode;
39 unsigned int for_kupdate:1;
40 unsigned int range_cyclic:1;
41 unsigned int for_background:1;
42
43 struct list_head list;
44 struct completion *done;
45};
46
47
48
49
50
51
52#define CREATE_TRACE_POINTS
53#include <trace/events/writeback.h>
54
55
56
57
58int nr_pdflush_threads;
59
60
61
62
63
64
65
66
67int writeback_in_progress(struct backing_dev_info *bdi)
68{
69 return test_bit(BDI_writeback_running, &bdi->state);
70}
71
72static inline struct backing_dev_info *inode_to_bdi(struct inode *inode)
73{
74 struct super_block *sb = inode->i_sb;
75
76 if (strcmp(sb->s_type->name, "bdev") == 0)
77 return inode->i_mapping->backing_dev_info;
78
79 return sb->s_bdi;
80}
81
82static inline struct inode *wb_inode(struct list_head *head)
83{
84 return list_entry(head, struct inode, i_wb_list);
85}
86
87
88static void bdi_wakeup_flusher(struct backing_dev_info *bdi)
89{
90 if (bdi->wb.task) {
91 wake_up_process(bdi->wb.task);
92 } else {
93
94
95
96
97 wake_up_process(default_backing_dev_info.wb.task);
98 }
99}
100
101static void bdi_queue_work(struct backing_dev_info *bdi,
102 struct wb_writeback_work *work)
103{
104 trace_writeback_queue(bdi, work);
105
106 spin_lock_bh(&bdi->wb_lock);
107 list_add_tail(&work->list, &bdi->work_list);
108 if (!bdi->wb.task)
109 trace_writeback_nothread(bdi, work);
110 bdi_wakeup_flusher(bdi);
111 spin_unlock_bh(&bdi->wb_lock);
112}
113
114static void
115__bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages,
116 bool range_cyclic)
117{
118 struct wb_writeback_work *work;
119
120
121
122
123
124 work = kzalloc(sizeof(*work), GFP_ATOMIC);
125 if (!work) {
126 if (bdi->wb.task) {
127 trace_writeback_nowork(bdi);
128 wake_up_process(bdi->wb.task);
129 }
130 return;
131 }
132
133 work->sync_mode = WB_SYNC_NONE;
134 work->nr_pages = nr_pages;
135 work->range_cyclic = range_cyclic;
136
137 bdi_queue_work(bdi, work);
138}
139
140
141
142
143
144
145
146
147
148
149
150
151void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages)
152{
153 __bdi_start_writeback(bdi, nr_pages, true);
154}
155
156
157
158
159
160
161
162
163
164
165
166void bdi_start_background_writeback(struct backing_dev_info *bdi)
167{
168
169
170
171
172 spin_lock_bh(&bdi->wb_lock);
173 bdi_wakeup_flusher(bdi);
174 spin_unlock_bh(&bdi->wb_lock);
175}
176
177
178
179
180
181
182
183
184
185
186static void redirty_tail(struct inode *inode)
187{
188 struct bdi_writeback *wb = &inode_to_bdi(inode)->wb;
189
190 if (!list_empty(&wb->b_dirty)) {
191 struct inode *tail;
192
193 tail = wb_inode(wb->b_dirty.next);
194 if (time_before(inode->dirtied_when, tail->dirtied_when))
195 inode->dirtied_when = jiffies;
196 }
197 list_move(&inode->i_wb_list, &wb->b_dirty);
198}
199
200
201
202
203static void requeue_io(struct inode *inode)
204{
205 struct bdi_writeback *wb = &inode_to_bdi(inode)->wb;
206
207 list_move(&inode->i_wb_list, &wb->b_more_io);
208}
209
210static void inode_sync_complete(struct inode *inode)
211{
212
213
214
215 smp_mb();
216 wake_up_bit(&inode->i_state, __I_SYNC);
217}
218
219static bool inode_dirtied_after(struct inode *inode, unsigned long t)
220{
221 bool ret = time_after(inode->dirtied_when, t);
222#ifndef CONFIG_64BIT
223
224
225
226
227
228
229 ret = ret && time_before_eq(inode->dirtied_when, jiffies);
230#endif
231 return ret;
232}
233
234
235
236
237static void move_expired_inodes(struct list_head *delaying_queue,
238 struct list_head *dispatch_queue,
239 unsigned long *older_than_this)
240{
241 LIST_HEAD(tmp);
242 struct list_head *pos, *node;
243 struct super_block *sb = NULL;
244 struct inode *inode;
245 int do_sb_sort = 0;
246
247 while (!list_empty(delaying_queue)) {
248 inode = wb_inode(delaying_queue->prev);
249 if (older_than_this &&
250 inode_dirtied_after(inode, *older_than_this))
251 break;
252 if (sb && sb != inode->i_sb)
253 do_sb_sort = 1;
254 sb = inode->i_sb;
255 list_move(&inode->i_wb_list, &tmp);
256 }
257
258
259 if (!do_sb_sort) {
260 list_splice(&tmp, dispatch_queue);
261 return;
262 }
263
264
265 while (!list_empty(&tmp)) {
266 sb = wb_inode(tmp.prev)->i_sb;
267 list_for_each_prev_safe(pos, node, &tmp) {
268 inode = wb_inode(pos);
269 if (inode->i_sb == sb)
270 list_move(&inode->i_wb_list, dispatch_queue);
271 }
272 }
273}
274
275
276
277
278
279
280
281
282
283
284
285
286static void queue_io(struct bdi_writeback *wb, unsigned long *older_than_this)
287{
288 list_splice_init(&wb->b_more_io, &wb->b_io);
289 move_expired_inodes(&wb->b_dirty, &wb->b_io, older_than_this);
290}
291
292static int write_inode(struct inode *inode, struct writeback_control *wbc)
293{
294 if (inode->i_sb->s_op->write_inode && !is_bad_inode(inode))
295 return inode->i_sb->s_op->write_inode(inode, wbc);
296 return 0;
297}
298
299
300
301
302static void inode_wait_for_writeback(struct inode *inode)
303{
304 DEFINE_WAIT_BIT(wq, &inode->i_state, __I_SYNC);
305 wait_queue_head_t *wqh;
306
307 wqh = bit_waitqueue(&inode->i_state, __I_SYNC);
308 while (inode->i_state & I_SYNC) {
309 spin_unlock(&inode_lock);
310 __wait_on_bit(wqh, &wq, inode_wait, TASK_UNINTERRUPTIBLE);
311 spin_lock(&inode_lock);
312 }
313}
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328static int
329writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
330{
331 struct address_space *mapping = inode->i_mapping;
332 unsigned dirty;
333 int ret;
334
335 if (!atomic_read(&inode->i_count))
336 WARN_ON(!(inode->i_state & (I_WILL_FREE|I_FREEING)));
337 else
338 WARN_ON(inode->i_state & I_WILL_FREE);
339
340 if (inode->i_state & I_SYNC) {
341
342
343
344
345
346
347
348
349 if (wbc->sync_mode != WB_SYNC_ALL) {
350 requeue_io(inode);
351 return 0;
352 }
353
354
355
356
357 inode_wait_for_writeback(inode);
358 }
359
360 BUG_ON(inode->i_state & I_SYNC);
361
362
363 inode->i_state |= I_SYNC;
364 inode->i_state &= ~I_DIRTY_PAGES;
365 spin_unlock(&inode_lock);
366
367 ret = do_writepages(mapping, wbc);
368
369
370
371
372
373
374 if (wbc->sync_mode == WB_SYNC_ALL) {
375 int err = filemap_fdatawait(mapping);
376 if (ret == 0)
377 ret = err;
378 }
379
380
381
382
383
384
385 spin_lock(&inode_lock);
386 dirty = inode->i_state & I_DIRTY;
387 inode->i_state &= ~(I_DIRTY_SYNC | I_DIRTY_DATASYNC);
388 spin_unlock(&inode_lock);
389
390 if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
391 int err = write_inode(inode, wbc);
392 if (ret == 0)
393 ret = err;
394 }
395
396 spin_lock(&inode_lock);
397 inode->i_state &= ~I_SYNC;
398 if (!(inode->i_state & I_FREEING)) {
399 if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
400
401
402
403
404 inode->i_state |= I_DIRTY_PAGES;
405 if (wbc->nr_to_write <= 0) {
406
407
408
409 requeue_io(inode);
410 } else {
411
412
413
414
415
416
417
418 redirty_tail(inode);
419 }
420 } else if (inode->i_state & I_DIRTY) {
421
422
423
424
425
426
427 redirty_tail(inode);
428 } else {
429
430
431
432
433
434 list_del_init(&inode->i_wb_list);
435 }
436 }
437 inode_sync_complete(inode);
438 return ret;
439}
440
441
442
443
444
445
446static bool pin_sb_for_writeback(struct super_block *sb)
447{
448 spin_lock(&sb_lock);
449 if (list_empty(&sb->s_instances)) {
450 spin_unlock(&sb_lock);
451 return false;
452 }
453
454 sb->s_count++;
455 spin_unlock(&sb_lock);
456
457 if (down_read_trylock(&sb->s_umount)) {
458 if (sb->s_root)
459 return true;
460 up_read(&sb->s_umount);
461 }
462
463 put_super(sb);
464 return false;
465}
466
467
468
469
470
471
472
473
474
475
476
477static int writeback_sb_inodes(struct super_block *sb, struct bdi_writeback *wb,
478 struct writeback_control *wbc, bool only_this_sb)
479{
480 while (!list_empty(&wb->b_io)) {
481 long pages_skipped;
482 struct inode *inode = wb_inode(wb->b_io.prev);
483
484 if (inode->i_sb != sb) {
485 if (only_this_sb) {
486
487
488
489
490
491 redirty_tail(inode);
492 continue;
493 }
494
495
496
497
498
499
500 return 0;
501 }
502
503
504
505
506
507
508 if (inode->i_state & (I_NEW | I_FREEING | I_WILL_FREE)) {
509 requeue_io(inode);
510 continue;
511 }
512
513
514
515
516
517 if (inode_dirtied_after(inode, wbc->wb_start))
518 return 1;
519
520 __iget(inode);
521 pages_skipped = wbc->pages_skipped;
522 writeback_single_inode(inode, wbc);
523 if (wbc->pages_skipped != pages_skipped) {
524
525
526
527
528 redirty_tail(inode);
529 }
530 spin_unlock(&inode_lock);
531 iput(inode);
532 cond_resched();
533 spin_lock(&inode_lock);
534 if (wbc->nr_to_write <= 0) {
535 wbc->more_io = 1;
536 return 1;
537 }
538 if (!list_empty(&wb->b_more_io))
539 wbc->more_io = 1;
540 }
541
542 return 1;
543}
544
545void writeback_inodes_wb(struct bdi_writeback *wb,
546 struct writeback_control *wbc)
547{
548 int ret = 0;
549
550 if (!wbc->wb_start)
551 wbc->wb_start = jiffies;
552 spin_lock(&inode_lock);
553 if (!wbc->for_kupdate || list_empty(&wb->b_io))
554 queue_io(wb, wbc->older_than_this);
555
556 while (!list_empty(&wb->b_io)) {
557 struct inode *inode = wb_inode(wb->b_io.prev);
558 struct super_block *sb = inode->i_sb;
559
560 if (!pin_sb_for_writeback(sb)) {
561 requeue_io(inode);
562 continue;
563 }
564 ret = writeback_sb_inodes(sb, wb, wbc, false);
565 drop_super(sb);
566
567 if (ret)
568 break;
569 }
570 spin_unlock(&inode_lock);
571
572}
573
574static void __writeback_inodes_sb(struct super_block *sb,
575 struct bdi_writeback *wb, struct writeback_control *wbc)
576{
577 WARN_ON(!rwsem_is_locked(&sb->s_umount));
578
579 spin_lock(&inode_lock);
580 if (!wbc->for_kupdate || list_empty(&wb->b_io))
581 queue_io(wb, wbc->older_than_this);
582 writeback_sb_inodes(sb, wb, wbc, true);
583 spin_unlock(&inode_lock);
584}
585
586
587
588
589
590
591
592
593#define MAX_WRITEBACK_PAGES 1024
594
595static inline bool over_bground_thresh(void)
596{
597 unsigned long background_thresh, dirty_thresh;
598
599 global_dirty_limits(&background_thresh, &dirty_thresh);
600
601 return (global_page_state(NR_FILE_DIRTY) +
602 global_page_state(NR_UNSTABLE_NFS) > background_thresh);
603}
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620static long wb_writeback(struct bdi_writeback *wb,
621 struct wb_writeback_work *work)
622{
623 struct writeback_control wbc = {
624 .sync_mode = work->sync_mode,
625 .older_than_this = NULL,
626 .for_kupdate = work->for_kupdate,
627 .for_background = work->for_background,
628 .range_cyclic = work->range_cyclic,
629 };
630 unsigned long oldest_jif;
631 long wrote = 0;
632 long write_chunk;
633 struct inode *inode;
634
635 if (wbc.for_kupdate) {
636 wbc.older_than_this = &oldest_jif;
637 oldest_jif = jiffies -
638 msecs_to_jiffies(dirty_expire_interval * 10);
639 }
640 if (!wbc.range_cyclic) {
641 wbc.range_start = 0;
642 wbc.range_end = LLONG_MAX;
643 }
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658 if (wbc.sync_mode == WB_SYNC_NONE)
659 write_chunk = MAX_WRITEBACK_PAGES;
660 else
661 write_chunk = LONG_MAX;
662
663 wbc.wb_start = jiffies;
664 for (;;) {
665
666
667
668 if (work->nr_pages <= 0)
669 break;
670
671
672
673
674
675
676
677 if ((work->for_background || work->for_kupdate) &&
678 !list_empty(&wb->bdi->work_list))
679 break;
680
681
682
683
684
685 if (work->for_background && !over_bground_thresh())
686 break;
687
688 wbc.more_io = 0;
689 wbc.nr_to_write = write_chunk;
690 wbc.pages_skipped = 0;
691
692 trace_wbc_writeback_start(&wbc, wb->bdi);
693 if (work->sb)
694 __writeback_inodes_sb(work->sb, wb, &wbc);
695 else
696 writeback_inodes_wb(wb, &wbc);
697 trace_wbc_writeback_written(&wbc, wb->bdi);
698
699 work->nr_pages -= write_chunk - wbc.nr_to_write;
700 wrote += write_chunk - wbc.nr_to_write;
701
702
703
704
705 if (wbc.nr_to_write <= 0)
706 continue;
707
708
709
710 if (!wbc.more_io)
711 break;
712
713
714
715 if (wbc.nr_to_write < write_chunk)
716 continue;
717
718
719
720
721
722 spin_lock(&inode_lock);
723 if (!list_empty(&wb->b_more_io)) {
724 inode = wb_inode(wb->b_more_io.prev);
725 trace_wbc_writeback_wait(&wbc, wb->bdi);
726 inode_wait_for_writeback(inode);
727 }
728 spin_unlock(&inode_lock);
729 }
730
731 return wrote;
732}
733
734
735
736
737static struct wb_writeback_work *
738get_next_work_item(struct backing_dev_info *bdi)
739{
740 struct wb_writeback_work *work = NULL;
741
742 spin_lock_bh(&bdi->wb_lock);
743 if (!list_empty(&bdi->work_list)) {
744 work = list_entry(bdi->work_list.next,
745 struct wb_writeback_work, list);
746 list_del_init(&work->list);
747 }
748 spin_unlock_bh(&bdi->wb_lock);
749 return work;
750}
751
752
753
754
755
756static unsigned long get_nr_dirty_pages(void)
757{
758 return global_page_state(NR_FILE_DIRTY) +
759 global_page_state(NR_UNSTABLE_NFS) +
760 get_nr_dirty_inodes();
761}
762
763static long wb_check_background_flush(struct bdi_writeback *wb)
764{
765 if (over_bground_thresh()) {
766
767 struct wb_writeback_work work = {
768 .nr_pages = LONG_MAX,
769 .sync_mode = WB_SYNC_NONE,
770 .for_background = 1,
771 .range_cyclic = 1,
772 };
773
774 return wb_writeback(wb, &work);
775 }
776
777 return 0;
778}
779
780static long wb_check_old_data_flush(struct bdi_writeback *wb)
781{
782 unsigned long expired;
783 long nr_pages;
784
785
786
787
788 if (!dirty_writeback_interval)
789 return 0;
790
791 expired = wb->last_old_flush +
792 msecs_to_jiffies(dirty_writeback_interval * 10);
793 if (time_before(jiffies, expired))
794 return 0;
795
796 wb->last_old_flush = jiffies;
797 nr_pages = get_nr_dirty_pages();
798
799 if (nr_pages) {
800 struct wb_writeback_work work = {
801 .nr_pages = nr_pages,
802 .sync_mode = WB_SYNC_NONE,
803 .for_kupdate = 1,
804 .range_cyclic = 1,
805 };
806
807 return wb_writeback(wb, &work);
808 }
809
810 return 0;
811}
812
813
814
815
816long wb_do_writeback(struct bdi_writeback *wb, int force_wait)
817{
818 struct backing_dev_info *bdi = wb->bdi;
819 struct wb_writeback_work *work;
820 long wrote = 0;
821
822 set_bit(BDI_writeback_running, &wb->bdi->state);
823 while ((work = get_next_work_item(bdi)) != NULL) {
824
825
826
827
828 if (force_wait)
829 work->sync_mode = WB_SYNC_ALL;
830
831 trace_writeback_exec(bdi, work);
832
833 wrote += wb_writeback(wb, work);
834
835
836
837
838
839 if (work->done)
840 complete(work->done);
841 else
842 kfree(work);
843 }
844
845
846
847
848 wrote += wb_check_old_data_flush(wb);
849 wrote += wb_check_background_flush(wb);
850 clear_bit(BDI_writeback_running, &wb->bdi->state);
851
852 return wrote;
853}
854
855
856
857
858
859int bdi_writeback_thread(void *data)
860{
861 struct bdi_writeback *wb = data;
862 struct backing_dev_info *bdi = wb->bdi;
863 long pages_written;
864
865 current->flags |= PF_SWAPWRITE;
866 set_freezable();
867 wb->last_active = jiffies;
868
869
870
871
872 set_user_nice(current, 0);
873
874 trace_writeback_thread_start(bdi);
875
876 while (!kthread_should_stop()) {
877
878
879
880
881 del_timer(&wb->wakeup_timer);
882
883 pages_written = wb_do_writeback(wb, 0);
884
885 trace_writeback_pages_written(pages_written);
886
887 if (pages_written)
888 wb->last_active = jiffies;
889
890 set_current_state(TASK_INTERRUPTIBLE);
891 if (!list_empty(&bdi->work_list) || kthread_should_stop()) {
892 __set_current_state(TASK_RUNNING);
893 continue;
894 }
895
896 if (wb_has_dirty_io(wb) && dirty_writeback_interval)
897 schedule_timeout(msecs_to_jiffies(dirty_writeback_interval * 10));
898 else {
899
900
901
902
903
904 schedule();
905 }
906
907 try_to_freeze();
908 }
909
910
911 if (!list_empty(&bdi->work_list))
912 wb_do_writeback(wb, 1);
913
914 trace_writeback_thread_stop(bdi);
915 return 0;
916}
917
918
919
920
921
922
923void wakeup_flusher_threads(long nr_pages)
924{
925 struct backing_dev_info *bdi;
926
927 if (!nr_pages) {
928 nr_pages = global_page_state(NR_FILE_DIRTY) +
929 global_page_state(NR_UNSTABLE_NFS);
930 }
931
932 rcu_read_lock();
933 list_for_each_entry_rcu(bdi, &bdi_list, bdi_list) {
934 if (!bdi_has_dirty_io(bdi))
935 continue;
936 __bdi_start_writeback(bdi, nr_pages, false);
937 }
938 rcu_read_unlock();
939}
940
941static noinline void block_dump___mark_inode_dirty(struct inode *inode)
942{
943 if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev")) {
944 struct dentry *dentry;
945 const char *name = "?";
946
947 dentry = d_find_alias(inode);
948 if (dentry) {
949 spin_lock(&dentry->d_lock);
950 name = (const char *) dentry->d_name.name;
951 }
952 printk(KERN_DEBUG
953 "%s(%d): dirtied inode %lu (%s) on %s\n",
954 current->comm, task_pid_nr(current), inode->i_ino,
955 name, inode->i_sb->s_id);
956 if (dentry) {
957 spin_unlock(&dentry->d_lock);
958 dput(dentry);
959 }
960 }
961}
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990void __mark_inode_dirty(struct inode *inode, int flags)
991{
992 struct super_block *sb = inode->i_sb;
993 struct backing_dev_info *bdi = NULL;
994 bool wakeup_bdi = false;
995
996
997
998
999
1000 if (flags & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
1001 if (sb->s_op->dirty_inode)
1002 sb->s_op->dirty_inode(inode);
1003 }
1004
1005
1006
1007
1008
1009 smp_mb();
1010
1011
1012 if ((inode->i_state & flags) == flags)
1013 return;
1014
1015 if (unlikely(block_dump))
1016 block_dump___mark_inode_dirty(inode);
1017
1018 spin_lock(&inode_lock);
1019 if ((inode->i_state & flags) != flags) {
1020 const int was_dirty = inode->i_state & I_DIRTY;
1021
1022 inode->i_state |= flags;
1023
1024
1025
1026
1027
1028
1029 if (inode->i_state & I_SYNC)
1030 goto out;
1031
1032
1033
1034
1035
1036 if (!S_ISBLK(inode->i_mode)) {
1037 if (inode_unhashed(inode))
1038 goto out;
1039 }
1040 if (inode->i_state & I_FREEING)
1041 goto out;
1042
1043
1044
1045
1046
1047 if (!was_dirty) {
1048 bdi = inode_to_bdi(inode);
1049
1050 if (bdi_cap_writeback_dirty(bdi)) {
1051 WARN(!test_bit(BDI_registered, &bdi->state),
1052 "bdi-%s not registered\n", bdi->name);
1053
1054
1055
1056
1057
1058
1059
1060 if (!wb_has_dirty_io(&bdi->wb))
1061 wakeup_bdi = true;
1062 }
1063
1064 inode->dirtied_when = jiffies;
1065 list_move(&inode->i_wb_list, &bdi->wb.b_dirty);
1066 }
1067 }
1068out:
1069 spin_unlock(&inode_lock);
1070
1071 if (wakeup_bdi)
1072 bdi_wakeup_thread_delayed(bdi);
1073}
1074EXPORT_SYMBOL(__mark_inode_dirty);
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093static void wait_sb_inodes(struct super_block *sb)
1094{
1095 struct inode *inode, *old_inode = NULL;
1096
1097
1098
1099
1100
1101 WARN_ON(!rwsem_is_locked(&sb->s_umount));
1102
1103 spin_lock(&inode_lock);
1104
1105
1106
1107
1108
1109
1110
1111
1112 list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
1113 struct address_space *mapping;
1114
1115 if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW))
1116 continue;
1117 mapping = inode->i_mapping;
1118 if (mapping->nrpages == 0)
1119 continue;
1120 __iget(inode);
1121 spin_unlock(&inode_lock);
1122
1123
1124
1125
1126
1127
1128
1129
1130 iput(old_inode);
1131 old_inode = inode;
1132
1133 filemap_fdatawait(mapping);
1134
1135 cond_resched();
1136
1137 spin_lock(&inode_lock);
1138 }
1139 spin_unlock(&inode_lock);
1140 iput(old_inode);
1141}
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152void writeback_inodes_sb_nr(struct super_block *sb, unsigned long nr)
1153{
1154 DECLARE_COMPLETION_ONSTACK(done);
1155 struct wb_writeback_work work = {
1156 .sb = sb,
1157 .sync_mode = WB_SYNC_NONE,
1158 .done = &done,
1159 .nr_pages = nr,
1160 };
1161
1162 WARN_ON(!rwsem_is_locked(&sb->s_umount));
1163 bdi_queue_work(sb->s_bdi, &work);
1164 wait_for_completion(&done);
1165}
1166EXPORT_SYMBOL(writeback_inodes_sb_nr);
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176void writeback_inodes_sb(struct super_block *sb)
1177{
1178 return writeback_inodes_sb_nr(sb, get_nr_dirty_pages());
1179}
1180EXPORT_SYMBOL(writeback_inodes_sb);
1181
1182
1183
1184
1185
1186
1187
1188
1189int writeback_inodes_sb_if_idle(struct super_block *sb)
1190{
1191 if (!writeback_in_progress(sb->s_bdi)) {
1192 down_read(&sb->s_umount);
1193 writeback_inodes_sb(sb);
1194 up_read(&sb->s_umount);
1195 return 1;
1196 } else
1197 return 0;
1198}
1199EXPORT_SYMBOL(writeback_inodes_sb_if_idle);
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209int writeback_inodes_sb_nr_if_idle(struct super_block *sb,
1210 unsigned long nr)
1211{
1212 if (!writeback_in_progress(sb->s_bdi)) {
1213 down_read(&sb->s_umount);
1214 writeback_inodes_sb_nr(sb, nr);
1215 up_read(&sb->s_umount);
1216 return 1;
1217 } else
1218 return 0;
1219}
1220EXPORT_SYMBOL(writeback_inodes_sb_nr_if_idle);
1221
1222
1223
1224
1225
1226
1227
1228
1229void sync_inodes_sb(struct super_block *sb)
1230{
1231 DECLARE_COMPLETION_ONSTACK(done);
1232 struct wb_writeback_work work = {
1233 .sb = sb,
1234 .sync_mode = WB_SYNC_ALL,
1235 .nr_pages = LONG_MAX,
1236 .range_cyclic = 0,
1237 .done = &done,
1238 };
1239
1240 WARN_ON(!rwsem_is_locked(&sb->s_umount));
1241
1242 bdi_queue_work(sb->s_bdi, &work);
1243 wait_for_completion(&done);
1244
1245 wait_sb_inodes(sb);
1246}
1247EXPORT_SYMBOL(sync_inodes_sb);
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259int write_inode_now(struct inode *inode, int sync)
1260{
1261 int ret;
1262 struct writeback_control wbc = {
1263 .nr_to_write = LONG_MAX,
1264 .sync_mode = sync ? WB_SYNC_ALL : WB_SYNC_NONE,
1265 .range_start = 0,
1266 .range_end = LLONG_MAX,
1267 };
1268
1269 if (!mapping_cap_writeback_dirty(inode->i_mapping))
1270 wbc.nr_to_write = 0;
1271
1272 might_sleep();
1273 spin_lock(&inode_lock);
1274 ret = writeback_single_inode(inode, &wbc);
1275 spin_unlock(&inode_lock);
1276 if (sync)
1277 inode_sync_wait(inode);
1278 return ret;
1279}
1280EXPORT_SYMBOL(write_inode_now);
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293int sync_inode(struct inode *inode, struct writeback_control *wbc)
1294{
1295 int ret;
1296
1297 spin_lock(&inode_lock);
1298 ret = writeback_single_inode(inode, wbc);
1299 spin_unlock(&inode_lock);
1300 return ret;
1301}
1302EXPORT_SYMBOL(sync_inode);
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313int sync_inode_metadata(struct inode *inode, int wait)
1314{
1315 struct writeback_control wbc = {
1316 .sync_mode = wait ? WB_SYNC_ALL : WB_SYNC_NONE,
1317 .nr_to_write = 0,
1318 };
1319
1320 return sync_inode(inode, &wbc);
1321}
1322EXPORT_SYMBOL(sync_inode_metadata);
1323